구슬 옮기기
시간 제한0.5초메모리 제한1024 MB
시작 격자와 목표 격자가 주어질 때, 구슬을 옮기거나 꺼내고 놓아 목표 모양을 만드는 최소 이동 횟수를 구합니다. 불가능하면 -1을 출력합니다.
구슬 옮기기
한서는 행 열의 구슬 보드판을 가지고 있다. 각 칸에 구슬이 있으면 1, 비어 있으면 0으로 표시된다. 보드판의 초기 상태가 주어지면, 한서는 구슬을 옮겨서 원하는 모양을 만들려고 한다. 구슬을 옮기는 일은 번거로우므로, 한서는 가능한 한 적은 움직임으로 옮기려고 한다.
한서는 구슬을 한 번 움직일 때 다음 세 가지 행동 중 하나를 할 수 있다.
- 구슬을 상하좌우 4방향으로 인접한 빈 칸으로 옮긴다. 구슬을 보드판 바깥으로 옮길 수는 없다.
- 원하는 칸의 구슬을 제거하여 저장한다. 저장할 수 있는 구슬의 개수에는 제한이 없지만, 목표 모양을 완성한 시점에는 저장한 구슬이 남아 있으면 안 된다.
- 저장한 구슬 중 하나를 원하는 빈 칸에 놓는다.
원하는 모양을 완성할 수 없으면 -1을 출력한다. 완성할 수 있으면 최소 움직임 횟수를 출력한다.