만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

Rush Hour 퍼즐

면접 대비

시간 제한2초메모리 제한1024 MB

요약
6x6 판에서 빨간 차(번호 1)를 3행 오른쪽 출구로 빼내는 데 필요한 최소 이동 횟수를 구하고, 10번을 넘으면 -1을 출력합니다.
난이도

보통10점 중 5점

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

문제

Rush Hour는 Nob Yoshigahara가 1970년대에 만든 퍼즐 게임이다. 현재는 ThinkFun이 제조한다. 보드는 6 × 6 격자이며, 차량이 미끄러지도록 타일에 홈이 파여 있다. 자동차와 트럭은 모두 폭이 한 칸이다. 자동차는 길이가 두 칸, 트럭은 길이가 세 칸이다. 차량은 직선을 따라 앞뒤로만 움직일 수 있다. 목표는 다른 차량을 길에서 치워서, 유일한 빨간 자동차를 보드의 출구로 완전히 빼내는 것이다. 그림 1은 예시 퍼즐이다.

그림 1: Rush Hour 퍼즐의 예.

각 차량에는 1부터 차량 수까지의 고유한 id가 붙는다. 빨간 자동차의 id는 1이다. 보드는 6 × 6 행렬로 나타내며, 이를 보드 행렬이라고 한다. 각 원소는 그 칸에 있는 차량의 id이고, 차량이 없으면 0이다. 출구는 3행의 오른쪽 끝에 있다. 그림 2는 그림 1 퍼즐의 보드 행렬이다.

그림 2: 그림 1 퍼즐에 대응하는 보드 행렬.

차량(자동차 또는 트럭)을 한 칸 옮기는 것을 한 스텝이라고 한다. 10스텝 이하로 풀 수 있는 퍼즐을 쉬운 퍼즐이라고 한다. 즉 빨간 자동차가 출구로 완전히 빠져나갈 수 있으면 쉬운 퍼즐이다. 퍼즐이 쉬운지 판별하는 프로그램을 작성하라.

입력

입력은 6줄이다. 각 줄에는 보드 행렬의 한 행을 나타내는 정수 6개가 공백으로 구분되어 있다.

출력

퍼즐이 쉬우면 풀이에 필요한 최소 스텝 수를 출력한다. 그렇지 않으면 -1을 출력한다.

제한

각 퍼즐의 보드에 있는 차량은 최대 10대이다.

각 퍼즐에서 보드 밖으로 뺄 수 있는 것은 빨간 자동차뿐이다.

예제2

  1. 예제 1

    입력
    2 2 0 0 0 7
    3 0 0 5 0 7
    3 1 1 5 0 7
    3 0 0 5 0 0
    4 0 0 0 8 8
    4 0 6 6 6 0
    
    예상 출력
    -1
    
  2. 예제 2

    입력
    0 2 0 6 6 0
    0 2 0 0 7 0
    0 3 1 1 7 0
    0 3 4 4 8 0
    0 5 5 5 8 0
    0 0 0 0 0 0
    
    예상 출력
    6