메뉴 건너뛰기

문제

00nh3 주차장 0  

시간메모리제출 올바른 답 비율
20초64MB
3
0
0.0%


나의 횟수나의 최근 판정시도 성공 비율
30
0.0%
주차장 

<그림 1>과 같이 정사각형 \(N \times N\) 크기의 주차장이 있다. 이 주차장에는 차들이 많이 있는데, 우리 차를 주차장 밖으로 빼내어야 한다. 그런데 차를 움직일 수 있는 주차 관리원은 한 명 뿐이다. 이 주차 관리원이 하나의 차를 타고 그 차를 움직이는 것을 하나의 '작업'이라 부르기로 한다. 하나의 작업에 차는 앞뒤로 다른 차와 겹치지 않는 한 얼마든지 움직일 수 있다. 다음의 가정 하에 작업의 횟수를 가장 적게하면서 우리 차를 주차장 밖으로 빼내기 위해서 움직어야 하는 모든 차들의 순서를 계산하는 프로그램을 작성하시오.

<가정>

  1. 모든 차의 폭은 1이고, 길이는 2 또는 3 이다.
  2. 차는 주차되어 있는 방향에 따라 수직차 (예 : <그림 1>의 4번차), 수평차 (예 : <그림 1>의 3번차)로 구분한다. 수직차는 상하로만, 수평차는 좌우로만 움직일 수 있고 회전은 할 수 없다.
  3. 같은 차에 대해서 여러 번 작업할 수 있다.
  4. 우리 차 외에 다른 차는 작업 도중 조금이라도 주차장 밖으로 나갈 수 없으며, 우리 차가 완전히 주차장을 나가는 순간에 전체 작업은 끝난다 (<그림2>).
  5. 우리 차가 수평차라면 오른쪽으로만 주차장을 나갈 수 있고, 수직차이면 위쪽으로만 나갈 수 있다.
  6. 우리 차가 주차장을 빠져나갈 수 없는 경우도 있을 수 있다.

<평가 방법>

  1. 각 테스트 데이터마다 실행 시간이 20초가 넘는 경우는 0점이다
  2. 우리 차 이외에 다른 차가 작업 도중 주차장을 조금이라도 벗어나거나 작업 도중 차들이 서로 겹치는 경우가 발생하면 0점이다.
  3. 1과 2의 경우가 아니라면 여러분들이 구한 작업 횟수에 따라 부준 점수가 주어질 수 있다.
입력

첫째 줄에는 주차장의 크기를 나타내는 정수 \(N (3 \leq N \leq 15)\), 다음 \(N\)개의 줄에는 각각 \(N\)개의 숫자가 한 칸씩 띄어서 나타나는데 0은 빈 공간을 뜻하고 1은 우리 차를 뜻하며, 나머지 차에는 2부터 연속된 정수가 각각 부여된다.

출력

첫째 줄에는 총 작업의 횟수를 나타내는 정수 K를 출력한다. 다음 K줄은 진행된 작업을 순서대로 출력한다. 한 줄이 한 작업을 나타내며 두 개의 정수로 이루어진다.

첫째 정수는 움직인 차의 번호, 둘째 정수는 차가 움직인 거리를 나타낸다. 수평차인 경우 오른쪽 방향으로 움직인 거리를 양의 정수, 왼쪽 방향으로 움직인 거리를 음의 정수로 나타낸다. 수직차이면 위쪽 방향으로 움직인 거리를 양의 정수, 아래쪽 방향으로 움직인 거리를 음의 정수로 나타낸다.

만약 차가 주차장을 빠져나갈 수 없으면 첫 줄에 0을 출력한다.

예시
1입력
6
2 0 0 6 6 6
2 0 0 8 0 9
1 1 0 8 4 9
3 3 3 0 4 9
0 0 10 0 7 7
11 11 10 5 5 0
출력
8
1 -1
2 -1
6 -3
8 1
4 2
7 -1
9 -2
1 5
출처
2000년 한국정보올림피아드 전국 본선 고등부 3번 문제
위로