이어진 수 하나가 경우의 수라고 생각한다. (문제 목표는 123456789인 수(경우)를 찾는 것)
map<해당 경우(수), 이동 횟수>를 사용하여 해당 경우에 도달하기까지 걸리는 이동 횟수를 저장한다.
9(0)이 있는 위치에서 시작하여 BFS 탐색을 하고 탐색 시에 swap을 해야 한다. (이동을 할 때 인덱스 계산에 주의한다.)
swap을 위해 string을 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12
ex) 현재 193425786 (0대신 9를 해야 각 자릿 수가 모두 채워진다. 0123...으로 하면 0이 사라짐) 193425786 -> 913425786 (왼쪽 이동) -> 123495786 (아래쪽 이동) -> 149425786 (오른쪽 이동)
3 x 3 0 1 2 3 4 5 6 7 8 행 = 9번 위치(0~8 중) / 3 열 = 9번 위치 % 3
주의
아래 코드에서 dist.count(next_num) == 0 대신 dist[next_num] == 0 을 하면 틀리다. dist[해당 수]에는 이동 횟수가 들어있고 dist.count(해당 수)는 해당 경우의 수가 몇 번 나왔는지 알려주기 때문이다. map에서 해당 키, 값을 넣어주지 않았는데 바로 해당 키에 대한 값을 참조하려고(dist[next_num] == 0) 하면 제대로 연산이 수행되지 않을 것이다.