FizzBuzz
FizzBuzz는 프로그래밍 문제이다. 규칙은 다음과 같다.
- 1에서 100까지 출력
- 3의 배수는 Fizz 출력
- 5의 배수는 Buzz 출력
- 3과 5의 공배수는 FizzBuzz 출력
위의 규칙을 모두 적용시켜서 작성해보면 코드는 다음과 같다.
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++) // 1부터 100까지 100번 반복
{
if (i % 3 == 0 && i % 5 == 0) // 3과 5의 공배수일 때
printf("FizzBuzz\n"); // FizzBuzz 출력
else if (i % 3 == 0) // 3의 배수일 때
printf("Fizz\n"); // Fizz 출력
else if (i % 5 == 0) // 5의 배수일 때
printf("Buzz\n"); // Buzz 출력
else
printf("%d\n", i); // 아무것도 해당되지 않을 때 숫자 출력
}
return 0;
}
먼저 i가 3의 배수이면서 5의 배수인지(공배수인지) 확인한다. 공배수라면 FizzBuzz를 출력한다. 그렇지 않다면 만약 3의 배수라면 Fizz를, 5의 배수라면 Buzz를 출력해주고, 모두 해당하지 않는다면 숫자를 출력해주는 코드이다. 이 때, 3의 배수인지 5의 배수인지 확인하기 전에 3과 5의 공배수인지 확인해 준 이유는 만약 3의 배수인지 확인하는 코드를 먼저 작성한다면, i가 15일 때 3의 배수이기 때문에 Fizz만 출력하고 넘어가기 때문에 공배수인지 먼저 확인해주어야 한다. 위의 코드는 3과 5의 공배수인지 확인하기 위해 논리 연산자 &&를 이용해서 표현하였지만, &&를 사용하지 않고 공배수를 직접 구해서 i%15==0과 같이 작성해도 된다. 위와 같이 작성하면 if문이 4개나 작성되지만, 삼항 연산자를 이용해 코드의 길이를 확 줄일 수 있다.
printf(i%3 ? i%5 ? "%d \n" : "Buzz \n" : i%5 ? "Fizz \n" : "FizzBuzz \n", i);
위의 4개의 if문을 삼항 연산자를 연속적으로 사용해서 한 줄로 줄인 코드이다. 이를 코드 골프 방식이라 부르는데, 비교적 적은 타수로 승리하는 골프게임에서 유래된 말로, 소스코드의 문자 수를 최대한 줄여서 작성하는 방식이다.
#33.6 퀴즈
x의 배수는 x로 나누었을 때 나머지가 0이 된다. 4의 배수는 4로 나누었을 때 나머지가 0이므로, 확인하는 방법으로는 i % 4 == 0이 된다. 답은 c.
i가 4의 배수이고 8의 배수이면 4와 8의 공배수이다. 이를 논리 연산자 &&를 사용하면 i%4==0 && i%8==0이 되는데, 이때 4와 8의 공배수는 8이므로 %4를 확인해 줄 필요없이 i%8==0만 확인해주면 된다. 답은 c, e.
#33.7 연습문제: 2와 7의 배수, 공배수 처리하기
#include <stdio.h>
int main()
{
for (int i = 1; i <= 100; i++)
{
if (①_________________________)
printf("FizzBuzz\n");
else if (②__________)
printf("Fizz\n");
else if (③__________)
printf("Buzz\n");
else
printf("%d\n", i);
}
return 0;
}
실행 결과
... (생략)
95
Fizz
97
FizzBuzz
99
Fizz
1. 2와 7의 공배수인지 확인해주어야 한다. 답은 i%2==0 && i%7 == 0 또는 i%14==0
2. 2의 배수인지 확인해야 한다. 답은 i%2==0
3. 7의 배수인지 확인해야 한다. 답은 i%7==0
#33.8 심사문제: 5와 11의 배수, 공배수 처리하기
앞서 배운 내용을 토대로 작성하면 된다. 단, 5와 11의 최소공배수는 55이므로, i%5==0 && i%11==0 대신 i%55==0으로 작성하였다. 코드는 다음과 같다.
#include <stdio.h>
int main(){
int x, y;
scanf("%d %d", &x, &y);
for(int i=x; i<=y; i++){
if(i%55==0)
printf("FizzBuzz \n");
else if(i%5==0)
printf("Fizz \n");
else if(i%11==0)
printf("Buzz \n");
else
printf("%d \n", i);
}
return 0;
}
'Programming > C' 카테고리의 다른 글
[ProjectH4C] 코딩도장 Unit 36~38 Write-Up (0) | 2020.07.23 |
---|---|
[ProjectH4C] 코딩도장 Unit 34 ~ 35 Write-Up (0) | 2020.07.22 |
[ProjectH4C] 코딩도장 Unit 32 Write-Up (0) | 2020.07.16 |
[ProjectH4C] 코딩도장 Unit 27~31 Write-Up (0) | 2020.07.16 |
[ProjectH4C] 코딩도장 Unit 26 Write-Up (0) | 2020.07.15 |