본문 바로가기
코딩 테스트/[c언어] cos pro 2급 기출문제

[No.6] 369 게임 박수의 개수는? / cos pro 2급 c언어 기출 문제

by M개발자 2021. 5. 5.
반응형

369 게임 박수의 개수는?

 

문제설명

 

1. 한 사람씩 차례대로 숫자를 1씩 더해가며 말합니다.

2. 말해야 하는 숫자에 3, 6, 9 중 하나라도 포함되어있다면 숫자를 말하는 대신 숫자에 포함된 3, 6, 9의 개수만큼 손뼉을 칩니다.

 

어떤 수 number가 매개변수로 주어질 떄, 1 ~ number까지 369 게임을 올바르게 진행했을 경우 박수를 총 몇 번 쳤는지 return하는 solution함수를 작성하세요.


예시

 

number return
40 22


예시 설명

 

3, 6, 9 : 각각 한 번 (총 +3)

13, 16, 19 : 각각 한 번 (총 +3)

23, 26, 29 : 각각 한 번 (총 +3)

30, 31, 32, 33, ..., 38, 39 : 십의 자리 10번 + 일의 자리 3번 총 (+13)

 

따라서 3 + 3 + 3 + 13 = 22번 박수를 친다. 


코드 해석 및 전체 코드

 

count ) 박수 친 횟수

 

for문 ) 1 ~ number까지 반복

 

current )

1의 자리가 3의 배수인지 구하기 위해 필요한 변수

for문을 돌 때마다 변수의 값이 바뀜 

 

while문 ) 

current가 0일 경우 반복문을 탈출함.

 

if in while ) current % 10이 3이거나 6이거나 9일 경우 count의 값을 1 증가함. 

 

while) if문을 수행하고 current를 10으로 나누었을 때 (10의 자리가 1의 자리가 됨) 0이 아니면 while문 수행함. 

 

if in while) 10으로 나눈 current를 10으로 나누었을 때의 나머지가 3, 6, 9일 경우 count의 값을 1 증가함.

 

current가 1의 자리일 경우

current count current /= 10
2 if문의 조건에 맞지 않아 증가 X 0
3 10으로 나누었을 때  나머지가
3이 되므로 
1 증가
0

current가 0이 되므로 while문을 탈출한다.

current가 10의 자리일 경우

current count current /= 10 10으로 나누었을 시 if문 조건
13 10으로 나누었을 때 
나머지가
3이 되므로 
1 증가
1 if문의 조건에 맞지 않아
증가 X
33 10으로 나누었을 때 
나머지가
3이 되므로 
1 증가
3 10으로 나누었을 때 
나머지가
3이 되므로 
1 증가

 

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
int solution(int number) {
	int count = 0; 
	for (int i = 1; i <= number; i++) {
		int current = i;
		while (current != 0) { 
			if (current % 10 == 3 || current % 10 == 6 || current % 10 == 9)
				count++;
			current /= 10;
		}
	}
	return count;
}
int main() {
	int number = 40;
	int ret = solution(number);

	printf("The return value of solution function %d \n", ret);
}

cos pro 2급 기출문제

github

반응형

댓글