간단한 예제로 문법 익숙해지기

이재홍 http://www.pyrasis.com 2014.12.17 ~ 2015.02.07

99병의 맥주 구현하기

99병의 맥주(99 Bottles of Beer)는 미국과 캐나다 등에서 자주 부르는 노래이며 벽장에 있는 99병의 맥주병을 하나씩 꺼내면서 줄어든다는 것이 주된 가사입니다.

다음과 같이 99병에서 시작해서 맥주병이 계속 줄어들며 맥주병이 2개 이상일 때는 bottles로 표시하고 1개일 때는 bottle로 표시합니다. 그리고 맨 마지막에는 가게에서 맥주를 다시 사와서 99병이 된다는 내용을 표시하면 됩니다.

99 bottles of beer on the wall, 99 bottles of beer.
Take one down, pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down, pass it around, 97 bottles of beer on the wall.
...(생략)
2 bottles of beer on the wall, 2 bottles of beer.
Take one down, pass it around, 1 bottle of beer on the wall.
1 bottle of beer on the wall, 1 bottle of beer.
Take one down, 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.

해답을 보지 않고 Go 언어로 99병의 맥주 문제를 풀어보기 바랍니다. for 반복문을 사용하여 99부터 감소하면서 출력하고, 각 숫자에 맞는 문장을 출력하면 됩니다.

package main

import "fmt"

func main() {
	for bottles := 99; bottles >= 0; bottles-- {
		switch {
		case bottles > 1:
			fmt.Printf("%d bottles of beer on the wall, %d bottles of beer.\n", bottles, bottles)
			s := "bottles"
			if bottles-1 == 1 {
				s = "bottle"
			}
			fmt.Printf("Take one down, pass it around, %d %s of beer on the wall.\n", bottles-1, s)
		case bottles == 1:
			fmt.Printf("1 bottle of beer on the wall, 1 bottle of beer.\n")
			fmt.Printf("Take one down, pass it around, No more bottles of beer on the wall\n")
		default:
			fmt.Printf("No more bottles of beer on the wall, no more bottles of beer.\n")
			fmt.Printf("Go to the store and buy some more, 99 bottles of beer on the wall.\n")
		}
	}
}

if, else if 조건문으로도 충분히 구현할 수 있지만 여기서도 switch 분기문에 조건식을 설정하여 구현했습니다. 그리고 bottle 단복수형을 처리할 때는 if 분기문을 사용하였습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

01 June 2015