본문 바로가기

cospro2급/cospro_1차

2021-05-05

cospro 6번 문제

369 게임 박수의 갯수는?

 

문제 설명

369 게임의 규칙

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

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

    손뼉을 친다.

어떤 수 number가 매개변수로 주어질 때, 1부터 number까지 369게임을 올바르게 진행했을 경우 박수를 총 몇 번 쳤는지를 return하는 solution함수를 완성한다.

 

매개변수 설명

number가 solution 함수의 매개변수로 주어진다.

number는 10 이상 1000 이하의 자연수이다.

 

return값 설명

1부터 number까지 369게임을 올바르게 진행했을 경우 박수를 총 몇 번을 쳤는지 return한다.

 

예시 설명

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

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

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

30, 31, 32..., 십의 자리 열번 + 일의 자리 세번 (+13)

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

 

코드 설명

#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; //10이상의 수가 나왔을 때 while문을 한번 더 실행
		}
	}
	return count;
}

int main() {
    int number = 40;
    int ret = solution(number);

    printf("solution 함수의 반환 값은 %d 입니다.\n", ret);
}

 

369게임의 포인트는 3의 배수가 아닌 3, 6, 9가 들어가 있는 것이다. 12는 박수를 치면 안되지만 13에는 쳐야하는 것이다. 그러므로 나눴을 때 몫이 3, 6, 9가 아닌 나머지가 3, 6, 9인 수를 찾아야 한다. 

current를 10으로 나누는 이유는 만약 30이 들어온다면 박수를 쳐야하지만 if문에서 조건이 맞지 않는다. 그러므로 10으로 나눠 십의 자리 숫자로 if문을 다시 수행하게 된다. (369게임은 3, 6, 9가 들어가면 박수를 친다는 점을 기억한다.)

'cospro2급 > cospro_1차' 카테고리의 다른 글

2021-05-06  (0) 2021.05.06
2021-05-06  (0) 2021.05.06
2021-05-05  (0) 2021.05.05
2021-05-03  (0) 2021.05.03
2021-05-03  (0) 2021.05.03