uju's Tech

[Baekjoon]맥주 99명 : 17293 본문

Baekjoon

[Baekjoon]맥주 99명 : 17293

ujusy 2020. 7. 18. 15:37

<본 포스팅은공부목적으로 작성되었습니다. 혹시 틀린 부분이 있거나 문제가 되는 부분이 있다면 답글 달아주세요!>

맥주 99명 : 17293


문제

99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.

98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.

(중략)

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 99 bottles of beer on the wall.

99 Bottles of Beer라는 노래의 가사는 Hello World처럼 프로그래밍 연습 예제로 자주 쓰인다. 우리의 목표는 N Bottles of Beer를 부르는 것이다. 고등학생이 맥주를 마시는 것은 세계로 미래로 꿈을 펼치는 선린인의 준법정신에 맞지 않지만 정말로 맥주를 마시는 게 아니라 노래만 부르면 되므로 상관은 없다.

N Bottles of Beer의 가사는 다음 과정을 통해 만들어진다. 현재 벽에 K병의 맥주가 있다고 하자. 맨 처음에는 K = N이다. 이때 맥주 한 병을 따면서 다음을 출력한다.

Kbottles of beer on the wall,Kbottles 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이 주어진다.

정리

  • 한 병 -> bottle
  • 0 병 -> no more bottles

Think

이 문제는 예외?처리가 가장 중요한 것 같다. 특히 1과 0 일 때 신경을 써야하는 문제이아. 처음에는 예제 출력 그대로 출력되도록 하였는데 어디서 틀린 것인치 찾지 못해서 여러모로 헤맸다.

만약에 1이 들어온다고 생각해보면 예상되는 출력은

1 bottle of beer on the wall, 1 bottle of beer.
Take one down and pass it around, no more bottles of beer on the wall.

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, 1 bottle of beer on the wall.

이렇게 출력되어야 하고 0이 들어온다고 하면

No more bottles of beer on the wall, no more bottles of beer.
Go to the store and buy some more, no more bottles of beer on the wall.

이렇게 출력되어야한다.

나는 마지막 문장에서 0과 1을 생각하지 못하고 계속 N bottles of beer on the wall로 출력을 해주었었다.

Code

N = int(input())
A = N
for i in reversed(range(int(N)+1)):
    if i == 0:
        print("No more bottles of beer on the wall, no more bottles of beer.")
        if A == 1:
            print("Go to the store and buy some more, {} bottle of beer on the wall.".format(A))
        elif A == 0:
            print("Go to the store and buy some more, no more bottles of beer on the wall.".format(A))
        else:
            print("Go to the store and buy some more, {} bottles of beer on the wall.".format(A))
    elif i == 1:
        print("1 bottle of beer on the wall, 1 bottle of beer.")
        print("Take one down and pass it around, no more bottles of beer on the wall."+'\n')
    else:
        print("{} bottles of beer on the wall, {} bottles of beer.".format(N, N))
        if i == 2:
            print("Take one down and pass it around, {} bottle of beer on the wall.".format(int(N) - 1)+'\n')
        else:
            print("Take one down and pass it around, {} bottles of beer on the wall.".format(int(N) - 1)+'\n')
    N = N-1

결론

N이 0과 1, 2일 때를 생각해보자. 답이 나온다..

'Baekjoon' 카테고리의 다른 글

[Baekjoon] 수 찾기: 1920  (0) 2020.07.18
[Baekjoon] 보너스 점수 : 17389  (0) 2020.07.18
[Baekjoon] The candy war : 9037  (0) 2020.07.18
[Baekjoon] 수빈이와 수열 : 10539  (0) 2020.07.18
[Baekjoon] 백준 문제풀이 작성 소개  (0) 2020.07.18
Comments