99병의 맥주 (루비)
★프로그래밍/Ruby :: 2016. 8. 20. 20:06프로그래밍 예제 중 Hello, world!와 더불어 유명한 '99병의 맥주'(99 bottles of beer)입니다.
99병의 맥주는 반복문과 분기문을 연습해 보기 위한 예제로 유명한데요.
루비에서는 다음과 같이 매우 간단하게 구현할 수 있습니다.
99.downto(1) do |x| puts sprintf("%d병의 맥주가 벽장에 있네, %d병의 맥주가 있네.", x, x) x > 1 ? c = sprintf("%d병의 맥주가 벽장에 있네.", x - 1) : c = "더 이상 벽장에 맥주는 없네." puts sprintf("한 병을 내려서 넘겼다네. %s", c) puts end puts "더 이상 맥주가 벽장에 없네. 맥주는 더 이상 없네." puts "가게에 가서 다시 사왔네. 99병의 맥주가 벽장에 있네."
이 코드를 실행하면 다음과 같습니다.
99병의 맥주가 벽장에 있네, 99병의 맥주가 있네. 한 병을 내려서 넘겼다네. 98병의 맥주가 벽장에 있네. 98병의 맥주가 벽장에 있네, 98병의 맥주가 있네. 한 병을 내려서 넘겼다네. 97병의 맥주가 벽장에 있네. 97병의 맥주가 벽장에 있네, 97병의 맥주가 있네. 한 병을 내려서 넘겼다네. 96병의 맥주가 벽장에 있네. (... 중간생략 ...) 2병의 맥주가 벽장에 있네, 2병의 맥주가 있네. 한 병을 내려서 넘겼다네. 1병의 맥주가 벽장에 있네. 1병의 맥주가 벽장에 있네, 1병의 맥주가 있네. 한 병을 내려서 넘겼다네. 더 이상 벽장에 맥주는 없네. 더 이상 맥주가 벽장에 없네. 맥주는 더 이상 없네. 가게에 가서 다시 사왔네. 99병의 맥주가 벽장에 있네.
이렇듯 99병에서 시작해 점점 한 병씩 줄어들다가 마지막 한 병까지 다 없어지고 나면 99병으로 되돌아가면서 프로그램이 끝납니다.
루비에서는 for 문과 if 문을 경우에 따라 위와 같은 간략한 형식으로 만들 수 있습니다.
그리고 이 프로그램을 조금만 응용하면,
1.upto(99) do |x| puts sprintf("타잔이 %d원짜리 팬티를 입고,", x * 10) puts sprintf("%d원짜리 칼을 차고 노래를 한다. 아아아~", (x + 1) * 10) puts end
타잔이 10원짜리 팬티를 입고, 20원짜리 칼을 차고 노래를 한다. 아아아~ 타잔이 20원짜리 팬티를 입고, 30원짜리 칼을 차고 노래를 한다. 아아아~ 타잔이 30원짜리 팬티를 입고, 40원짜리 칼을 차고 노래를 한다. 아아아~ (... 중간생략 ...) 타잔이 970원짜리 팬티를 입고, 980원짜리 칼을 차고 노래를 한다. 아아아~ 타잔이 980원짜리 팬티를 입고, 990원짜리 칼을 차고 노래를 한다. 아아아~ 타잔이 990원짜리 팬티를 입고, 1000원짜리 칼을 차고 노래를 한다. 아아아~
이렇게도 할 수 있습니다. 원래의 예제보다 좀 더 단순해졌지만 돌아가는 원리는 같습니다.
많은 도움 되셨나요?
유용한 정보로 활용하시기 바랍니다.