[BOJ 9336] 아스키 아트 표
View as PDFHTML에서 표를 그리려면 태그를 이용해야 한다. 표를 그리는 간단한 표현이 주어졌을 때, 표의 아스키 아트를 만드는 프로그램을 작성하시오.
표는 m × n 그리드로 나타낼 수 있고, 각 칸의 너비는 두 글자, 높이는 한 글자이다. 2 × 3 그리드는 다음과 같이 나타낼 수 있다.
-- -- -- |11|12|13| -- -- -- |21|22|23| -- -- --
출력은 2m + 1개의 행으로 이루어져 있고, 각 행은 3n + 1개의 글자로 이루어져 있다. (홀수 행의 앞과 뒤에 들어가는 공백도 포함)
표는 행이나 열 여러 개를 합칠 수 있다. 예를 들어, 칸 11이 두 행을 합치고, 칸 22가 두 열을 합쳤을 때의 아스키 아트는 다음과 같다.
-- -- --
|11|12|13|
-- --
| |22 |
-- -- --m과 각 칸이 합친 행과 열의 수가 주어졌을 때, 아스키 아트를 만드는 프로그램을 작성하시오.
입력 형식
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 행의 수 m이 주어진다. 다음 m개 줄에는 각 칸이 합친 행의 수와 열의 수가 주어진다. 합친 정보는 한 번만 주어지며, 왼쪽 위 칸에서만 주어진다.
한 행을 나타내는데 총 N개의 합친 정보가 필요한 경우, 다음과 같이 주어진다.
N RS1 CS1 ... RSN CSN
RSk 와 CSk 는 1보다 크거나 같고, 9보다 작거나 같은 수이며, 그 칸에 합쳐진 행의 수와 열의 수를 나타낸다. 어떤 행에 이미 이전 행에 합쳐진 칸이 있는 경우에는, 그 행을 나타내는데 필요한 숫자가 더 적을 수도 있다.
입력은 다음과 같은 조건을 만족한다.
- 행의 수와 열의 수는 1보다 크거나 같고, 9보다 작거나 같다.
- 모든 행의 열의 개수는 모두 같다.
- 합치는 정보가 겹치는 경우가 없다.
- 모든 칸은 어떤 칸에게 합쳐져 있다.
최대 100개의 테스트 케이스가 주어지며, 입력의 마지막은 m = 0으로 나타낸다.
출력 형식
각 테스트 케이스 마다, 입력으로 주어진 표의 아스키 아트를 출력한다. 모든 칸의 왼쪽 위 칸에는 행 번호와 열 번호를 출력한다. 모든 테스트 케이스 사이에는 빈 줄을 출력한다.
아스키 아트를 출력할 때, 줄이 공백으로 끝나는 경우에는 그 공백을 모두 삭제하고 출력해야 한다.
예제 입력
3
2 1 1 1 1
2 1 1 1 1
2 1 1 1 1
3
2 1 1 2 1
1 1 1
2 1 1 1 1
3
1 1 2
2 1 1 1 1
2 1 1 1 1
3
2 2 1 1 2
1 2 2
1 1 1
0
예제 출력
-- --
|11|12|
-- --
|21|22|
-- --
|31|32|
-- --
-- --
|11|12|
--
|21| |
-- --
|31|32|
-- --
-- --
|11 |
-- --
|21|22|
-- --
|31|32|
-- --
-- -- --
|11|12 |
-- --
| |22 |
--
|31| |
-- -- --
Comments