Juwan Park :: 99병의 맥주 (루비)

99병의 맥주 (루비)

★프로그래밍/Ruby :: 2016.08.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원짜리 칼을 차고 노래를 한다. 아아아~

이렇게도 할 수 있습니다. 원래의 예제보다 좀 더 단순해졌지만 돌아가는 원리는 같습니다.


많은 도움 되셨나요?

유용한 정보로 활용하시기 바랍니다.

댓글을 달아 주세요.

Today 10    Yday 71    Tot 70,086
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP