장기 첫 수는 31가지인데 상과 포의 몫은 0입니다 — 상차림 넷을 전부 세어 봤습니다
핵심 요약 — 장기 시작 판에서 초가 둘 수 있는 수는 31가지입니다. 그중 상(象)이 갈 수 있는 칸은 0개, 포(包)도 0개입니다. 말 열여섯 개 중 넷이 첫 수에 아예 못 움직입니다. 상차림 네 가지를 전부 계산해 봤더니 총 31가지는 넷 다 똑같았고, 달라지는 것은 마와 상이 그 31가지를 어떻게 나눠 갖느냐뿐이었습니다.
장기를 처음 두는 사람이 가장 자주 하는 말이 있습니다. "상은 어떻게 쓰는 거예요?"
세어 보니 그 질문에는 이유가 있었습니다.
시작 판에서 갈 수 있는 칸
초(아래쪽) 열여섯 개 말을 하나씩 짚어 갈 수 있는 칸을 셌습니다.
| 말 | 개수 | 갈 수 있는 칸 |
|---|---|---|
| 차(車) | 2 | 2 + 2 = 4 |
| 마(馬) | 2 | 2 + 2 = 4 |
| 상(象) | 2 | 0 + 0 = 0 |
| 포(包) | 2 | 0 + 0 = 0 |
| 졸(卒) | 5 | 2+3+3+3+2 = 13 |
| 사(士) | 2 | 2 + 2 = 4 |
| 장(將) | 1 | 6 |
| 합계 | 16 | 31가지 |
첫 수는 31가지입니다. 그리고 그중 상과 포의 몫은 0입니다.
체스의 첫 수가 20가지, 그중 나이트가 4가지를 차지하는 것과 비교하면 장기 쪽이 더 넓어 보입니다. 그런데 넓이의 절반 가까이(13가지)가 졸이고, 큰 말 중 둘은 아예 못 움직입니다.
상은 왜 못 움직이나
상은 직선으로 한 칸, 이어서 대각으로 두 칸 갑니다. 세 칸을 가는 셈인데, 지나는 자리 두 곳이 모두 비어 있어야 합니다. 한 곳이라도 막히면 못 갑니다.
시작 판에서 왼쪽 상이 앞으로 나가려면 이렇게 지나가야 합니다.
졸 ← 도착 후보 도착 후보 → 졸
↖ ↗
포 ← 지나는 자리 지나는 자리 → 빈칸
↖ ↗
빈칸 ← 첫 칸
↑
상
한쪽으로 꺾으면 내 포가 지나는 자리를 막고, 반대쪽으로 꺾으면 도착 자리에 내 졸이 앉아 있습니다. 옆으로 가는 길도 뒷줄이 내 말로 꽉 차 있어 막힙니다. 그래서 0입니다.
막는 것이 상대 말이 아니라 전부 내 말이라는 점이 핵심입니다. 상은 판을 열어 준 다음에야 쓰는 말입니다.
포는 넘을 것이 없어서 못 움직입니다
포는 사이에 말이 정확히 하나 있어야 그 말을 넘어갑니다. 다른 포를 넘을 수는 없고, 다른 포를 잡을 수도 없습니다.
시작 판에서 포는 졸 줄 바로 뒤, 좌우로 하나씩 앉아 있습니다. 세로로 보면 넘을 말이 없거나 넘은 자리가 판 밖이고, 가로로는 같은 줄에 다른 포밖에 없어 넘지 못합니다.
포는 판이 어느 정도 채워져야 살아나는 말입니다. 그래서 장기에서 포는 초반에 자리를 잡아 두고 중반부터 일하는 말로 취급됩니다.
빈 판에 혼자 두면 마와 상은 똑같습니다
여기서 재미있는 것이 나옵니다. 아무것도 없는 판 한가운데에 말을 하나만 놓고 갈 수 있는 칸을 세면 이렇습니다.
| 말 | 빈 판에서 갈 수 있는 칸 |
|---|---|
| 차 | 17 |
| 마 | 8 |
| 상 | 8 |
| 졸 | 3 |
| 포 | 0 (넘을 말이 없음) |
| 사·장 | 0 (궁성 밖이라 못 움직임) |
마와 상이 똑같이 8칸입니다. 둘 다 여덟 방향으로 뻗으니 당연합니다.
그런데 시작 판에서는 마가 4칸, 상이 0칸이었습니다. 차이는 지나는 자리의 개수입니다 — 마는 한 곳만 비면 되고, 상은 두 곳이 다 비어야 합니다. 판이 붐빌수록 이 차이가 벌어집니다.
같은 8칸인데 실전에서 전혀 다른 말이 되는 이유가 여기 있습니다.
상차림 넷을 전부 계산해 봤습니다
실제 장기는 두기 전에 뒷줄의 마와 상 자리를 각자 고릅니다. 이걸 상차림이라고 하고 네 가지가 있습니다. 그 넷을 전부 만들어 첫 수를 세어 봤습니다.
| 상차림 | 첫 수 합계 | 마 | 상 |
|---|---|---|---|
| 마상마상 | 31 | 4 | 0 |
| 상마상마 | 31 | 2 | 2 |
| 마상상마 | 31 | 3 | 1 |
| 상마마상 | 31 | 3 | 1 |
넷 다 31가지입니다. 총량은 하나도 안 바뀝니다.
바뀌는 것은 누가 그 몫을 갖느냐뿐입니다. 마를 바깥쪽에 두면 마가 4를 갖고 상이 0이 되고, 상을 바깥쪽에 두면 2 대 2로 갈립니다.
상차림이 "어느 쪽이 더 유리한가"의 문제가 아니라 "초반을 어느 말로 열 것인가"의 문제라는 뜻입니다. 상을 일찍 쓰고 싶으면 상을 바깥에 두고, 마로 빠르게 나가고 싶으면 마를 바깥에 둡니다. 총 31가지는 어차피 그대로입니다.
우리 사이트의 장기는 상차림을 고르는 단계 없이 마상마상 하나로 고정해 두고 시작합니다. 그래서 위 표의 첫 줄이 실제로 만나는 판입니다 — 첫 수에 상 두 개는 못 움직입니다.
두는 사람에게 남는 것
- 첫 수는 졸이나 마나 차. 상과 포는 애초에 후보가 없습니다.
- 상을 쓰려면 먼저 길을 여세요. 상을 막는 것은 상대가 아니라 내 졸과 내 포입니다.
- 마와 상을 같은 말로 생각하지 마세요. 빈 판에서는 똑같이 8칸이지만, 붐비는 판에서는 상이 훨씬 자주 묶입니다.
- 포는 기다리는 말입니다. 넘을 말이 생기기 전까지는 자리만 잡습니다.
재현 방법. 갈 수 있는 칸은 lib/board/janggi.ts의 movesFrom()에 시작 판을 그대로 넣어 센 값입니다(전수 계산이라 표본 오차가 없습니다). 상차림 네 가지는 뒷줄의 마·상 자리만 바꾸고 나머지 배치는 똑같이 두어 만들었습니다. 빈 판 값은 10행 9열 빈 판의 한가운데(5행 5열)에 말 하나만 놓고 센 것입니다.