문제 : 99 Bottles of Beer라는 노래의 가사는 Hello World처럼 프로그래밍 연습 예제로 자주 쓰인다. 우리의 목표는 N Bottles of Beer를 부르는 것이다. 고등학생이 맥주를 마시는 것은 세계로 미래로 꿈을 펼치는 선린인의 준법정신에 맞지 않지만 정말로 맥주를 마시는 게 아니라 노래만 부르면 되므로 상관은 없다.
N Bottles of Beer의 가사는 다음 과정을 통해 만들어진다. 현재 벽에 K병의 맥주가 있다고 하자. 맨 처음에는 K = N이다. 이때 맥주 한 병을 따면서 다음을 출력한다.
K bottles of beer on the wall, K bottles of beer.
Take one down and pass it around, K-1 bottles of beer on the wall.
단, 맥주가 한 병만 있음을 표현하려면 1 bottles가 아니라 1 bottle이라고 해야 한다. 또한 맥주가 한 병도 없음을 표현하려면 0 bottles가 아니라 no more bottles라고 해야 한다.
맥주가 아직 남아있으면 위 과정을 반복하고, 더 이상 남아있지 않으면 다음을 출력하고 종료한다. 마찬가지로 맥주를 한 병만 사오는 경우 1 bottles가 아니라 1 bottle이라고 해야 한다.
No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, N bottles of beer on the wall.
입력 : 1 이상 99 이하의 자연수 N이 주어진다.
출력 : N Bottles of Beer의 가사를 출력한다.
문제를 대충 읽으면 단순한 출력문제인것 같지만 생각보다 어려운 문제이다.
맥주가 1개 남았을 때 1 bottle이라고 하는 부분과 맥주가 없을 때 no more bottles를 출력하는 부분만 조심하면 쉽게 풀 수 있다.
#include <cstdio>
using namespace std;
int main(){
int K;
scanf("%d", &K);
for (int i = K; i >= 0; i--) {
if (i > 2) {
printf("%d bottles of beer on the wall, %d bottles of beer.\n", i, i);
printf("Take one down and pass it around, %d bottles of beer on the wall.\n\n", i - 1);
}
else if (i == 2) {
printf("2 bottles of beer on the wall, 2 bottles of beer.\n");
printf("Take one down and pass it around, 1 bottle of beer on the wall.\n\n");
}
else if (i == 1) {
printf("1 bottle of beer on the wall, 1 bottle of beer.\n");
printf("Take one down and pass it around, no more bottles of beer on the wall.\n\n");
}
}
printf("No more bottles of beer on the wall, no more bottles of beer.\n");
if (K == 1) {
printf("Go to the store and buy some more, 1 bottle of beer on the wall.\n");
}
else{
printf("Go to the store and buy some more, %d bottles of beer on the wall.\n", K);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / 17509] And the Winner Is... Ourselves! - C++ (1) | 2021.01.29 |
---|---|
[백준 / 11047] 동전 0 - C++ (1) | 2021.01.29 |
[백준 / 4796] 캠핑 - C++ (0) | 2021.01.29 |
[백준 / 13699] 점화식 - C++ (0) | 2021.01.13 |
[백준 / 18004] From A to B - C++ (0) | 2021.01.12 |