정육면체

시간 제한1초메모리 제한512 MB

요약
m행 n열 격자에 놓인 큐브 탑들을 뒤에서 앞으로, 아래에서 위로 그려 가까운 큐브가 먼 큐브를 가리도록 한 뒤, 전체를 감싸는 가장 작은 사각형만 출력하는 문제입니다.
난이도

보통10점 중 5점

유형
시뮬레이션, 구현, 행렬
정답자
아직 제출이 없습니다

문제

쌓아 올린 정육면체 더미를 ASCII 문자로 입체적으로 그리려고 한다. 정육면체는 mm개의 행과 nn개의 열에 반듯하게 놓여 있고, 어떤 정육면체 위에는 정육면체가 하나 이상 더 올라가 탑을 이룬다. 행에는 1부터 mm까지 번호가 붙어 있으며, 1번 행은 그림에서 가장 먼 행이고 mm번 행은 가장 가까운 행이다. 열에는 왼쪽부터 오른쪽으로 1부터 nn까지 번호가 붙어 있다. 어떤 정육면체는 다른 정육면체를 가리고, 가려진 정육면체는 일부 또는 전부가 보이지 않는다.

정육면체 하나는 +(더하기), -(빼기), |(세로선), /(빗금), 공백 문자로 6줄 7칸에 다음과 같이 그린다.

  +---+
 /   /|
+---+ |
|   | +
|   |/
+---+

이 6줄 7칸 가운데 첫째 줄의 왼쪽 두 칸, 둘째 줄의 왼쪽 한 칸, 다섯째 줄의 오른쪽 한 칸, 여섯째 줄의 오른쪽 두 칸은 정육면체에 속하지 않는다. 나머지 칸은 면 안쪽의 공백까지 포함해 모두 정육면체에 속한다.

정육면체의 위치는 다음 규칙에 따라 정해진다.

  • 같은 행에서 열 번호가 1 커지면 그림은 오른쪽으로 4칸 옮겨진다.
  • 행 번호가 1 작아지면(한 행 더 멀어지면) 그림은 위로 2줄, 오른쪽으로 2칸 옮겨진다.
  • 한 층 위의 정육면체는 바로 아래 정육면체보다 위로 3줄 옮겨진다.

가려지는 관계는 다음과 같이 그리는 것과 같다. 1번 행부터 mm번 행까지, 같은 행에서는 1번 열부터 nn번 열까지, 같은 위치에서는 아래층부터 위층까지 차례로 정육면체를 그리고, 나중에 그린 정육면체가 먼저 그린 그림을 덮는다.

주어진 배치 전체를 그리는 프로그램을 작성하시오. 그림은 가능한 한 적은 줄과 칸을 써야 하므로, 모든 정육면체를 담는 가장 작은 직사각형을 출력한다. 정육면체가 없는 빈칸은 .(마침표)로 표시한다.

입력

첫째 줄에 자연수 mm과 nn이 주어진다. (1≤m,n≤501 \le m, n \le 50)

다음 mm개의 줄에는 각각 nn개의 자연수가 주어진다. 각 수는 50 이하이며, 그 위치에 쌓인 정육면체의 개수, 즉 탑의 높이를 나타낸다. ii번째 줄의 jj번째 수는 ii번 행 jj번 열의 높이다.

출력

문제에서 설명한 대로 정육면체 더미의 그림을 출력한다. 모든 줄의 길이는 같다.

예제3

  1. 예제 1

    입력
    1 2
    1 2
    
    예상 출력
    ......+---+
    ...../   /|
    ....+---+ |
    ..+-|   | +
    ./  |   |/|
    +---+---+ |
    |   |   | +
    |   |   |/.
    +---+---+..
    
  2. 예제 2

    입력
    3 1
    2
    1
    3
    
    예상 출력
    ......+---+
    ..+---+  /|
    ./   /|-+ |
    +---+ | | +
    |   | + |/|
    |   |/|-+ |
    +---+ |/| +
    |   | + |/.
    |   |/| +..
    +---+ |/...
    |   | +....
    |   |/.....
    +---+......
    
  3. 예제 3

    입력
    2 3
    2 3 2
    1 2 1
    
    예상 출력
    ........+---+....
    ......./   /|....
    ......+---+ |....
    ....+-|   | +---+
    .../  |   |/   /|
    ..+---+---+---+ |
    ..|  /   /|   | +
    ..| +---+ |   |/|
    ..+-|   | +---+ |
    ./  |   |/   /| +
    +---+---+---+ |/.
    |   |   |   | +..
    |   |   |   |/...
    +---+---+---+....