BOJ 1809, BOJ 2372, BOJ 2377, BOJ 2393, BOJ 14337 - 단순 출력 언어 제한 문제들 (Various Language)
재미를 위하여, 요즘 백준에 단순 출력 문제들이 제법 많이 추가되었다.
하라는 대로만 출력하면 된다고 자만하다가 큰코 다치는 수가 있다. 왜냐고? 언어 제한 문제니까.
1960년대에 개발되어 이미 현역에서 물러난 지 오래인 고대의 유물부터 오로지 프로그래머를 물먹이기 위해서 만들어진 악의 가득한 언어까지.
이번에는 개중 쉬운 다섯 개의 답을 포스팅하도록 하겠다.
그럼 본격적으로 풀이에 돌입해 보자.
문제 (BOJ 1809 - Moo / Bronze V)
You've decided to buy a farm and start a new life. To pass some time while you wait for the title of tha land to go through, produce the following ascii cow.
당신은 농장을 사서 새로운 삶을 시작하기로 결정했다. 땅의 소유권이 이전되기를 기다리는 동안 시간을 보내기 위해서 다음 아스키 아트 소를 만들어라.
출력
언어 제한 - Golfscript
(___)
(o o)____/
@@ \
\ ____,/
// //
^^ ^^
내 코드
"(___)\n"
"(o o)____/\n"
" @@ \\\n"
" \\ ____,/\n"
" // //\n"
" ^^ ^^"
Golfscript는 문자열 입력 자체로도 출력을 지원해주는 아주 고마운 언어이다. 직접 그걸로 프로그램을 짜다가는 고마움이 싹 가시겠지만.
줄바꿈을 하기 위해서 이스케이프 문자 \n을 삽입하는 것을 잊지 말자.
문제 (BOJ 2372 - Livestock count / Bronze V)
Print a table that describes the current cound of all your livestock.
당신이 소유한 모든 가축의 현재 수를 설명하는 표를 출력하라.
출력
언어 제한 - Ada
Print the table below as shown. The character "-", is a dash not an underscore.
아래 보이는 표를 그대로 출력하라. 단, "-"는 언더바가 아니라 대시 기호이다.
Animal Count
-----------------
Chickens 100
Clydesdales 5
Cows 40
Goats 22
Steers 2
내 코드
with Ada.Text_IO; use Ada.Text_IO;
procedure Hello is
begin
Put_Line("Animal Count");
Put_Line("-----------------");
Put_Line("Chickens 100");
Put_Line("Clydesdales 5");
Put_Line("Cows 40");
Put_Line("Goats 22");
Put_Line("Steers 2");
end Hello;
Ada도 출력이 그렇게 어렵지 않다. 다만 인터넷에서 문법을 봐야 제대로 출력할 수 있다.
procedure로 시작한 프로그램, end로 끝내는 걸 잊지 말도록 하자. 의문의 WA가 작렬할 것이다.
문제 (BOJ 2372 - Pottery / Bronze V)
3D printing is becoming more and more prominent in today’s society. Unfortunately, you don’t currently have access to a 3D printer. Instead, you can just print an item with your knowledge of coding! Print a clay pot.
3D 프린팅은 현대 사회에서 점점 더 두각을 나타내고 있다. 하지만 불행하게도 당신은 지금 3D 프린터를 만질 수가 없다. 대신에 당신의 코딩 지식으로 물건을 출력할 수 있다! 진흙 항아리를 출력하라.
출력
언어 제한 - FreeBASIC
Output the pot exactly as shown in the example output. There are no blank lines before or after the output, and there are no trailing spaces on any of the lines.
항아리를 정확하게 예제 출력에 표시된 대로 출력하라. 출력 앞이나 뒤에 불필요한 빈 줄은 없으며, 어떤 줄도 쓸모없는 공백으로 끝나지 않는다.
_________
\_ _/
\ /
| |
/ \
/ \
| |
/---------\
| \-/ \-/ |
\---------/
\_______/
내 코드
print " _________"
print " \_ _/"
print " \ /"
print " | |"
print " / \"
print " / \"
print " | |"
print "/---------\"
print "| \-/ \-/ |"
print "\---------/"
print " \_______/"
FreeBASIC의 문자열 출력은 파이썬과 참 많이 닮아 있다. 자동으로 개행을 해줄 뿐더러, 문법도 괄호의 유무 말고는 별 차이가 없다.
뒤에 쓸모없는 공백을 인쇄하거나, \를 이스케이프하여 \\로 쓰는 실수는 저지르지 않도록 주의하자.
문제 (BOJ 2393 - Rook / Bronze IV)
You have just learned how to output text to the screen and your teacher has challenged you to create an ASCII art of a chess piece. You have decided to make your favorite piece, the rook.
방금 당신은 문자열을 화면에 출력하는 법을 배웠다. 선생님은 당신에게 체스 말을 아스키 아트로 그리라는 숙제를 내 주었고, 당신은 가장 좋아하는 체스 말인 룩을 프린트하기로 결심했다.
출력
언어 제한 - Cobol
The rook art, exactly as shown below, with no extra blank spaces. In particular, a line must not end with a blank space.
룩 그림을 정확히 아래와 동일하게, 불필요한 공백 없이 출력하라. 특히, 줄이 공백으로 끝나는 일은 절대 없어야 한다.
___ ___ ___
| |__| |__| |
| |
\_________/
\_______/
| |
| |
| |
| |
|_____|
__/ \__
/ \
/_______________\
내 코드
IDENTIFICATION DIVISION.
PROGRAM-ID. IDSAMPLE.
ENVIRONMENT DIVISION.
PROCEDURE DIVISION.
DISPLAY ' ___ ___ ___'
DISPLAY ' | |__| |__| |'
DISPLAY ' | |'
DISPLAY ' \_________/'
DISPLAY ' \_______/'
DISPLAY ' | |'
DISPLAY ' | |'
DISPLAY ' | |'
DISPLAY ' | |'
DISPLAY ' |_____|'
DISPLAY ' __/ \__'
DISPLAY ' / \'
DISPLAY '/_______________\'
STOP RUN.
내가 푼 단순 출력 문제들 중 가장 악질인 문제였다. 대부분의 온라인 컴파일러에서는 줄 앞의 7글자짜리 공백이 없어도 알아서 잘 출력해 주지만, 고대의 문법을 따르자면 맨 앞의 7자는 꼭 비워둬야 한다.
1959년에 만들어진 언어다 보니 극히 일부가 아니고서야 현역 Cobol 프로그램이 돌아가지를 않아서, 인터넷에서 아무리 찾아도 문법을 찾기가 힘들었다. 이 글을 쓰게 된 계기.
K-9 자주곡사포의 사통체계가 이걸로 작성되어 있다고 하는데, 확인해 볼 방도가 없으니 나는 모르겠다.
문제 (BOJ 14337 - Helicopter / Bronze V)
Write a program that displays the helicopter as seen below.
아래 보이는 헬리콥터 그림을 출력하는 프로그램을 작성하라.
출력
언어 제한 - Visual Basic
Displays the helicopter, with no extra blank spaces. In particular, a line must not end with a blank space.
헬리콥터를 불필요한 공백 없이 출력하라. 특히, 어떤 줄도 공백으로 끝나서는 안 된다.
===================
____||___
\ / / []\
X======= \__
/ \ \____________|
|| ||
\-----------/
내 코드
Module VBModule
Sub Main()
Console.WriteLine(" ===================")
Console.WriteLine(" ____||___")
Console.WriteLine("\ / / []\")
Console.WriteLine(" X======= \__")
Console.WriteLine("/ \ \____________|")
Console.WriteLine(" || ||")
Console.WriteLine(" \-----------/")
End Sub
End Module
Visual Basic은 조금 명령어가 복잡하지만, 그렇다고 Python의 print나 Ada의 Put_Line과 크게 다르지 않다.
여기서는 Module과 그 아래 Sub를 시작하고 끝내 주는 것을 확실하게 해 줘야 한다!
이로서 1809, 2372, 2377, 2393, 14337 다섯 문제의 풀이를 마친다.