티스토리 뷰

 

 

 

문제

 

 

369게임은 여러 명이 같이하는 게임입니다. 게임의 규칙은 아래와 같습니다.

1부터 시작합니다.

  • 한 사람씩 차례대로 숫자를 1씩 더해가며 말합니다.
  • 말해야 하는 숫자에 3,6,9중 하나라도 포함되어있다면 숫자를 말하는 대신 숫자에 포함된 3,6,9의 개수만큼 손뼉을 칩니다.

어떤 수 number가 매개변수로 주어질 때, 1부터 number까지 369게임을 올바르게 진행했을 경우 박수를 총 몇 번 쳤는지를 return 하도록 solution함수를 작성하려 합니다.  빈칸을 채워 전체 코드를 완성해주세요.

 

 


 

 

 

#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 / 3) == 0)
				count++;
			current /= 10;
		}
	}
	return count;
}
int main() {
	int number = 40;
	int ret = solution(number);

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

 

 


 

 

 

 

예시

number 3,6,9 return
40 3, 6, 9, 13, 16, 19, 23, 26, 29, 30, 31, 32, 33(2번), 34, 35, 36(2번), 37, 38, 39(2번) 22

 

 

 

 

 

코드설명

단계 과정
main solution함수를 호출하고 매개변수 number(40)을 전달한다.
solution 박수를 친 횟수를 저장할 변수 count를 정의한다.
solution - for문 1부터 40까지 i를 증가시킨다.
3,6,9를 판단할 변수 current를 선언하고, i값을 넣는다. 
solution - for - while current/3을 계산하여 일의자리가 3의 배수인지를 판별하여 count++한다.
current/=10 으로 current의 십의자리만 남긴다.
이때 current가 0일경우(i가 10보다 작은 경우) while를 빠져나와 i++가 진행된다.
current가 0이 아닐 경우(i가 10보다 큰 경우) current/3으로 십의자리가 3의 배수인지를 판별하여 count++한다. 
i값에 따라 반복해서 각 자리수가 3의 배수인지를 판별한 후, while를 빠져나온다.
solution / main 모든 계산이 종료된 후, main함수에 count를 반환하며 프로그램이 종료된다.

 

댓글