본문 바로가기

C언어_VisualStudio_실습

369게임 박수치기; while문, if문

문제, 풀이, 답 순서로 되어있어요! :-)

 

[문제]

"369! 369! 369!"

벌주를 걸고 369 게임을 하게 되었어요.

틀리면 벌주를 마셔야 해요! 긴장하는 저를 위해 369 힌트를 줄 수 있나요?

 

차례에 부를 숫자 n을 입력받고, 불러야 할 숫자나 박수를 예시에 맞게 출력하세요.(박수는 clap으로 출력합니다.)

 

[풀이]

369 게임은 부른 숫자에 3이나 6이나 9가 있으면 그 수만큼 박수를 치는 게임이에요.

예를 들어, 13이라는 숫자는 3이 하나 있으니 박수를 한번 치면 되고, 81이라는 숫자에는 3이나 6이나 9가 없기 때문에 81을 그대로 말하면 됩니다.

 

우선, 변수부터 생각을 해봅시다.

  부를 숫자 n을 선언하고,

  3이나 6이나 9가 없을 때 숫자를 그대로 불러야 하니까 n값을 복사할 original도 선언합니다.

  박수를 쳤는지 안쳤는지 판단할 count도 선언해줍니다. 박수를 안쳤다면 0, 쳤다면 0이 아닌 다른 수가 됩니다.

	int n, count = 0, original;

사용자에게 숫자 n을 입력받고 그 값을 하나 복사합니다.

나중에 박수를 치는 것을 검사한 후에 박수를 치지 않았다면 원래의 숫자를 말해야 하니까요.

	scanf("%d", &n);
	original = n;

박수를 칠 경우를 생각해보면, 각 자리의 숫자가 3이나 6이나 9인지를 판단하면 돼요.

if문을 이용해서 코드를 작성하고 조건을 만족한다면 clap을 출력합니다.

if (n % 10 == 3 || n % 10 == 6 || n % 10 == 9) {
			printf("clap ");
			count++;
		}

이것을 숫자의 자릿수만큼 반복을 해주어야 하는데, 몇 번 반복해야 할 지 정해지지 않았으니 while문을 사용합니다.

오른쪽 끝 자리 숫자부터 검사를 해보는 내용으로 코드를 작성해줍니다.

예를들어 135라는 숫자로 생각을 해봅시다.

135를 10으로 나눈 나머지 값인 5가 3, 6, 9 중에 하나를 만족하면 박수를 칩니다. 근데 만족하지 않으니 5라는 값은 건너뛰는 거죠. 즉 135를 10으로 나눈 몫인 13을 다시 계산하는 겁니다. 

13을 10으로 나눈 나머지 값인 3이 3, 6, 9 중에 하나를 만족하면 박수를 칩니다. 이번에는 만족하니 박수를 친 후 다음 숫자를 검사해줍니다. 즉 13을 10으로 나눈 몫인 1을 다시 계산하는 겁니다. 

1을 10으로 나눈 나머지 값인 1이 3, 6, 9 중에 하나를 만족하면 박수를 칩니다. 근데 만족하지 않으니 1라는 값은 건너뛰는 거죠. 즉 11을 10으로 나눈 몫인 0을 다시 계산하는 겁니다. 앗, 그런데 0이면 반복문이 종료되니 모든 자릿수를 검사하고 반복문은 자연스럽게 종료됩니다.

while (n) {	// ex. 135
	// 박수
    if (n % 10 == 3 || n % 10 == 6 || n % 10 == 9) {
		printf("clap ");
		count++;	// 박수를 쳤다면 count를 바꾸어 주어야 함
	}
	n /= 10;	// 오른쪽부터 없어짐 ex. 135 -> 13
}

그러면 이제 3이나 6이나 9이 없는 숫자의 경우를 생각해봅시다.

이건 박수를 칠 때 같이 구한 count값을 이용하면 돼요.

박수를 한 번이라도 쳤다면 count는 0이 아닌 다른 값을 가지고 있을 테니까요. 

즉, count가 0일 때만 원래 입력받은 숫자를 그대로 출력하면 됩니다. 참고로 원래 숫자는 original에 복사해두었어요.

	if (count == 0) printf("%d", original);

 

[답]

 

#pragma warning(disable:4996)	//scanf 함수 오류 해결
#include <stdio.h>

int main() {
	int n, count = 0, original;
	scanf("%d", &n);
	original = n;
	while (n) {
		if (n % 10 == 3 || n % 10 == 6 || n % 10 == 9) {
			printf("clap ");
			count++;
		}
		n /= 10;
	}
	if (count == 0) printf("%d", original);
	return 0;
}