소수의 개수 구하기
문제 설명
자연수의 각 자릿수 중에서 소수의 개수를 구하려 합니다.
즉 자연수를 각 자릿수 별로 나누었을 때, 2, 3, 5, 7이 몇 개 있는지 구하려 합니다..
자연수 number가 매개변수로 주어질 때, number의 각 자릿수 중에서 소수는 몇 개인지 return 하도록 solution 함수를 작성했습니다.
그러나, 코드 일부분이 잘못되어있기 때문에 올바르게 동작하지 않으므로 한 줄만 변경해서 올바르게 동작하도록 수정하세요.
예시
number | return |
29022531 | 5 |
수정해야 할 코드
int solution(int number) {
int count = 0;
while (number >= 0) {
int n = number % 10;
if (n == 2 || n == 3 || n == 5 || n == 7)
count += 1;
number /= 10;
}
return count;
}
수정
while (number >= 0) → while (number != 0) // while (number > 0) |
while문을 수행하면서 number를 10으로 나누는데,
number가 0보다 크거나 같을 때까지 돈다면 number가 0이 될 때 number /= 10을 계속 수행해도 0이 되므로 조건을 만족해 while문을 계속 수행한다. (무한루트)
그러므로 number가 0보다 크거나, 0이 아닐 때까지 while문을 수행하도록 조건을 수정해야 한다.
while (number >= 0)로 돌릴 경우
number가 10일 경우
number | number /= 10 | number >= 0 |
10 | 1 | O |
1 | 0 | O |
0 | 0 | O |
number가 0이어도 조건을 만족해 while문을 계속 반복한다. (무한 루트)
while (number != 0)로 돌릴 경우
number가 10일 경우
number | number /= 10 | number != 0 |
10 | 1 | O |
1 | 0 | X |
number가 0이 되어 조건을 만족하지 않아 while문을 종료한다.
코드 해석 및 전체 코드
count ) 각 자릿수 중 소수의 개수를 return 할 변수
while 문 ) number가 0이 아닐 때까지 반복한다.
n ) number를 10으로 나누었을 때 나오는 나머지 값
if 문 ) n이 2이거나 3이거나 5이거나 7일 때(소수일 때) count를 1 증가한다.
number /= 10 ) number를 10으로 나눈다.
number | 29022531 | 2902253 | 290225 | 29022 | 2902 | 290 | 29 | 2 |
n | 1 | 3 | 5 | 2 | 2 | 0 | 9 | 2 |
if문 만족 | X | O | O | O | O | X | X | O |
count | +1 | +1 | +1 | +1 | +1 | |||
/ 10 | 2902253 | 290225 | 29022 | 2902 | 290 | 29 | 2 | 0 |
count는 총 5가 되고, number가 0이 될 때 조건을 만족하지 않아 while문을 종료한다.
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int number) {
int count = 0;
while (number != 0) {
int n = number % 10;
if (n == 2 || n == 3 || n == 5 || n == 7)
count += 1;
number /= 10;
}
return count;
}
int main() {
int number = 29022531;
int ret = solution(number);
printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}
구름 goormedu COS PRO 2급 기출문제 - C언어
[2차] 문제8) 소수의 개수 구하기
'코딩 테스트 > [c언어] cos pro 2급 기출문제' 카테고리의 다른 글
[No.20] 상품권 총 지급액 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.12 |
---|---|
[No.19] 투표에 대한 후보 찾기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.12 |
[No.17] 섭씨, 화씨 온도 바꾸기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.11 |
[No.16] 엘리베이터의 총 이동 거리 구하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.10 |
[No.15] 몬스터 공격하기 / cos pro 2급 c언어 기출 문제 (0) | 2021.05.10 |
댓글