이번 문서의 목표: 쌓여 있는 블록 더미의 총 개수를 숨은 블록까지 정확히 셀 수 있고, 위·앞·옆에서 본 투상도를 만들 수 있으며, 큐브를 회전시켰을 때 어느 면이 어디로 가는지 계산할 수 있게 된다.
왜 눈에 보이는 것만 세면 틀리는가
04편에서 입체도형의 면·모서리 개념을, 19편에서 정육면체를 굴렸을 때 각 면이 어디로 이동하는지 계산하는 법을 익혔습니다. 이번 편은 그 감각을 정육면체 여러 개가 쌓인 블록 더미에 적용합니다.
블록 더미 문제가 어려운 이유는 그림이 3차원 입체를 2차원 종이 위에 그린 것이라서, 가려서 안 보이는 블록이 항상 있기 때문입니다. 눈에 보이는 블록만 세면 실제보다 적게 세는 실수가 반드시 생깁니다.
쉽게 말하면: 블록 더미는 여러 층의 건물이 늘어선 도시를 위에서 내려다본 것과 같습니다. 앞 건물에 가려 안 보여도 뒤에 더 높은 건물이 있을 수 있는 것처럼, 그림에 안 보인다고 블록이 없는 것은 아닙니다.
위에서 본 높이 지도로 바꾸기
정의
투상도(投影圖)는 입체를 특정 방향에서 바라보았을 때 보이는 윤곽만 평면에 옮긴 그림입니다. 블록 문제에서는 세 방향의 투상도를 씁니다.
- 평면도: 위에서 내려다본 모양. 어느 칸에 블록이 있고 없는지를 보여 줍니다.
- 정면도: 앞에서 본 모양. 왼쪽에서 오른쪽으로, 각 줄에서 가장 높은 기둥의 층수를 보여 줍니다.
- 측면도: 옆에서 본 모양. 앞뒤 방향으로, 각 줄에서 가장 높은 기둥의 층수를 보여 줍니다.
핵심 원리: 정면에서 보면, 어떤 기둥 뒤에 그보다 낮은 기둥이 숨어 안 보이더라도, 그 기둥보다 더 높은 기둥이 뒤에 있으면 그 튀어나온 윗부분은 보입니다. 그래서 정면도의 각 줄 높이는 “맨 앞 기둥의 높이”가 아니라 그 줄(같은 좌우 위치)에 있는 모든 기둥 중 가장 높은 값입니다. 측면도도 같은 원리로, 앞뒤 방향의 각 줄에서 가장 높은 값을 취합니다.
예시로 계산해 봅시다
블록이 3행 3열로 쌓여 있고, 각 칸의 숫자는 그 자리에 쌓인 블록의 층수(높이)입니다. 뒤쪽 줄이 위, 앞쪽 줄(보는 사람과 가장 가까운 줄)이 아래에 오도록 위에서 내려다본 모습입니다.
| 왼쪽 | 가운데 | 오른쪽 | |
|---|---|---|---|
| 뒤 | 2 | 1 | 3 |
| 중간 | 1 | 0 | 2 |
| 앞 | 3 | 2 | 1 |
- 총 개수를 구합니다. 아홉 칸의 높이를 모두 더합니다. 뒤 줄 합 (2+1+3=6), 중간 줄 합 (1+0+2=3), 앞 줄 합 (3+2+1=6)을 모두 더하면 6+3+6=15개입니다.
- 정면도를 만듭니다. 왼쪽 열(2, 1, 3)의 최댓값은 3, 가운데 열(1, 0, 2)의 최댓값은 2, 오른쪽 열(3, 2, 1)의 최댓값은 3입니다. 정면도는 3층-2층-3층입니다.
- 측면도를 만듭니다. 뒤 줄(2, 1, 3)의 최댓값은 3, 중간 줄(1, 0, 2)의 최댓값은 2, 앞 줄(3, 2, 1)의 최댓값은 3입니다. 측면도는 3층-2층-3층입니다.
- 평면도를 만듭니다. 높이가 0인 가운데 칸(중간 행, 가운데 열)만 빈칸으로 표시하고, 나머지 여덟 칸은 블록이 있는 칸으로 표시합니다.
해석: 정면도와 측면도가 우연히 같은 모양(3층-2층-3층)으로 나왔지만, 이는 이 예시의 숫자가 그렇게 나왔을 뿐 항상 같다는 뜻은 아닙니다. 세 투상도는 각각 다른 방향에서 본 정보이므로, 하나만으로는 전체 모양을 복원할 수 없고 세 가지를 함께 봐야 원래 배치를 알 수 있습니다.
숨은 블록까지 빠짐없이 세는 법
숫자로 높이가 주어지지 않고 3차원 그림(입체감 있는 그림)만 주어지는 문제에서는, 다음처럼 층을 기준으로 세는 방법이 가장 안전합니다.
- 평면도를 먼저 그립니다. 어느 칸에 블록 기둥이 있는지 위에서 본 모양으로 표시합니다.
- 1층부터 확인합니다. 블록이 하나라도 쌓인 모든 칸은 1층에 블록이 있습니다. 이 칸의 개수를 셉니다.
- 2층을 확인합니다. 높이가 2 이상인 칸만 2층에 블록이 있습니다. 이 칸의 개수를 셉니다.
- 더 높은 층까지 같은 방식으로 반복합니다. 각 층에서 “그 층까지 도달하는 기둥이 몇 개인가”를 세고, 블록이 하나도 남지 않을 때까지 반복합니다.
- 층별로 센 개수를 모두 더합니다. 이 합이 전체 블록 개수와 같습니다.
위 예시에 이 방법을 적용해 확인해 봅시다. 1층: 높이가 0인 칸(중간 행 가운데)을 뺀 8칸에 블록이 있습니다 → 8개. 2층: 높이가 2 이상인 칸(뒤-왼쪽 2, 뒤-오른쪽 3, 중간-오른쪽 2, 앞-왼쪽 3, 앞-가운데 2) → 5개. 3층: 높이가 3 이상인 칸(뒤-오른쪽 3, 앞-왼쪽 3) → 2개. 4층 이상은 없습니다. 합계 8+5+2=15개로, 앞서 숫자를 그대로 더한 결과와 정확히 일치합니다.
왜 이 방법이 안전한가: 그림만 보고 세면 뒤에 가려 안 보이는 낮은 기둥이나, 높은 기둥의 가려진 아랫부분을 빠뜨리기 쉽습니다. 층을 기준으로 “이 층에 도달하는 기둥이 몇 개인가”를 세면, 실제로 눈에 보이는지 여부와 상관없이 기계적으로 전부 셀 수 있습니다.
큐브 회전 — 19편의 굴리기 규칙 재사용
정육면체 하나를 회전시키는 문제는 19편에서 익힌 굴리기 규칙을 그대로 사용합니다. 여섯 면에 서로 다른 기호가 있는 정육면체가 있다고 합시다.
초기 상태: 위 = ★, 아래 = ●, 북 = ◆, 남 = ■, 동 = ▲, 서 = ▼
이 정육면체를 동쪽으로 한 번, 이어서 남쪽으로 한 번 굴리면 위쪽에 오는 기호는 무엇일까요?
- 동쪽으로 굴립니다. 19편의 규칙에 따라 새 위 = 원래 서(▼), 새 아래 = 원래 동(▲), 새 동 = 원래 위(★), 새 서 = 원래 아래(●). 남·북은 그대로(북=◆, 남=■). 굴린 뒤 상태: 위=▼, 아래=▲, 북=◆, 남=■, 동=★, 서=●
- 이어서 남쪽으로 굴립니다. 새 아래 = 원래 남(■), 새 위 = 원래 북(◆), 새 북 = 원래 아래(▲), 새 남 = 원래 위(▼). 동·서는 그대로(동=★, 서=●). 굴린 뒤 상태: 위=◆, 아래=■, 북=▲, 남=▼, 동=★, 서=●
정답: 위쪽에는 원래 북쪽에 있던 기호 ◆가 옵니다.
해석: 두 단계 이상 회전을 연달아 적용하는 문제는 암산으로 한 번에 처리하려다 방향을 헷갈리기 쉽습니다. 19편에서처럼 매 단계마다 여섯 자리(위·아래·동·서·남·북)의 값을 표나 메모로 적어 가며 한 단계씩 넘어가는 것이 실수를 막는 가장 확실한 방법입니다.
자주 틀리는 점
- 눈에 보이는 정면·측면 블록만 세고 뒤에 숨은 블록을 빠뜨립니다. 반드시 평면도(위에서 본 배치)를 먼저 그리고, 층별로 개수를 세는 방식으로 확인해야 숨은 블록을 놓치지 않습니다.
- 정면도를 “맨 앞줄의 높이”로 착각합니다. 앞줄보다 뒷줄이 더 높으면 그 튀어나온 부분이 정면에서도 보이므로, 정면도는 항상 그 열의 최댓값이어야 합니다. 측면도도 마찬가지로 그 행의 최댓값입니다.
- 평면도와 정면도를 혼동합니다. 평면도는 위에서 본 칸의 배치(어디에 블록이 있는가)이고, 정면도는 앞에서 본 높이 윤곽(얼마나 높은가)입니다. 서로 다른 정보를 담고 있어 하나가 다른 하나를 대신할 수 없습니다.
- 정면도만 보고 뒤에 숨은 낮은 블록의 정확한 개수까지 알 수 있다고 착각합니다. 정면도는 열별 최댓값만 보여 줄 뿐, 그 뒤에 더 낮은 기둥이 몇 개 더 있는지는 알려주지 않습니다. 전체 개수는 평면도의 높이 숫자를 모두 더하거나 층별로 세어야만 정확히 구할 수 있습니다.
- 큐브를 여러 번 굴릴 때 중간 상태를 기록하지 않고 한 번에 암산합니다. 방향이 여러 번 바뀌면 첫 단계의 결과를 잊어버리기 쉬우므로, 매 단계마다 여섯 자리의 값을 적어 가며 진행해야 합니다.
핵심 정리
- 정면도·측면도는 각 줄에서 가장 높은 기둥의 값(최댓값)을 취하며, 평면도는 위에서 본 칸의 배치를 보여 준다.
- 세 투상도는 서로 다른 정보를 담고 있으므로, 하나만으로는 원래 배치를 완전히 복원할 수 없다.
- 숨은 블록을 빠짐없이 세려면 바닥층부터 층마다 그 높이 이상인 칸의 개수를 세어 모두 더한다.
- 큐브 회전은 19편의 굴리기 규칙(동·서·남·북으로 굴릴 때 위·아래·옆면이 어떻게 바뀌는지)을 그대로 적용하며, 여러 단계를 연달아 굴릴 때는 매 단계의 상태를 기록해야 실수를 줄인다.