고급 ASCII 큐브

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

요약
N×M 격자 위에 쌓인 정육면체 탑을 등각 투영 ASCII 그래픽으로 그리는 문제로, 필요한 최소 줄 수와 너비에 맞춰 출력합니다.
난이도

보통10점 중 4점

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

문제

탁자 표면이 N×MN \times M 개의 정사각형 칸으로 나뉘어 있습니다. 일부 칸 위에는 정육면체(큐브)가 위로 차곡차곡 쌓여 탑을 이룹니다. 각 칸 위에 쌓인 큐브의 개수는 행렬 AA로 주어집니다.

프로그램은 탁자의 모습을 ASCII 그래픽으로 그려야 하며, 각 큐브는 다음과 같이 표현합니다.

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

(사용하는 문자는 +, -, /, | 이며 ASCII 코드는 각각 43, 45, 47, 124입니다.) 배경으로는 점 . (ASCII 46)을 사용합니다.

입력

입력에는 정수 NN과 MM이 주어지고, 이어서 행렬 AA가 한 행씩 주어집니다. 첫 번째 행은 보는 사람에게서 가장 먼 큐브 탑들을 왼쪽에서 오른쪽 순서로 나타내고, 마지막 행은 보는 사람에게 가장 가까운 탑들을 나타냅니다.

출력

모든 큐브를 보여주는 데 필요한 최소한의 줄 수로 탁자의 모습을 출력합니다. 각 줄의 길이는 모두 같아야 하며, 이는 모든 큐브를 보여주는 데 필요한 최소 너비와 같습니다.

제한

  • 1≤N,M,Aij≤401 \le N, M, A_{ij} \le 40

예제2

  1. 예제 1

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

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