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 5    Yday 37    Tot 65,556
Juwan Park
Juwan Park's blog is powered by Daum and TISTORY.
Contemporary Blue for TISTORY.
Designed by Juwan Park. Creative Commons License
▲ TOP