KOI 전국 2009 초2- 루빅의 사각형 > 문제은행 : 정보올림피아드&알고리즘



2250 : 루빅의 사각형

제한시간
1000 ms   
메모리제한
128 MB   
해결횟수
1036 회   
시도횟수
2885 회   

문제

4×4 격자판에 1에서 16까지 정수 번호가 매겨진 16개 타일이 임의로 놓여져 있다.

타일을 움직여 그림1과 같이 타일을 놓이게 하려고 한다.


 
타일을 움직이는 방법은 하나의 행(가로줄)을 오른쪽으로 원하는 칸 수만큼 순환적으로 움직이거나, 
하나의 열(세로줄)을 원하는 칸 수만큼 아래쪽으로 순환적으로 움직이는 것이다.

그림 2는 그림 1의 2번째 행을 오른쪽으로 2칸 움직인 것이다.

그림 1의 2번째 행의 오른쪽 끝에 있는 7번 타일과 8번 타일이 오른쪽 경계를 넘어가서 왼쪽 끝으로 옮겨갔다. 

 


그림 3은 그림 2의 3번째 열을 아래쪽으로 1칸 움직인 것이다. 
그림 2의 3번째열의 가장 아래에 있는 15번 타일이 가장위쪽으로 옮겨갔다.

 

 

그림 3과 같이 타일이 놓여진 격자판이 주어졌다면 3번째 열을 3칸 움직인 다음,
2번째 행을 2칸 움직이면 그림 1과 같이 타일이 놓이게 된다. 
따라서 2번 움직이면 된다.

1에서 16까지 번호가 매겨진 타일이 임의로 놓여져 있을 때 그림 1과 같이 타일이 놓일 수 있도록 
타일을 움직이는 순서를 출력하는 프로그램을 작성하시오. 
여기서 움직이는 횟수는 최소로 하여야 한다.


입력형식

4×4 격자판에 놓여진 타일 번호가 행단위로 4개 줄에 주어진다.

타일 번호는 1부터 16까지의 정수이다. 

각 줄에는 해당하는 행에 놓여지는 4개타일의 번호가 빈칸을 사이에 두고 순서대로 주어진다.


출력형식

첫 번째 줄에는 움직이는 횟수를, 두 번째 줄부터는 한 줄에 하나씩 타일을 움직이는 방법을 순서대로 출력한다.

이 때, 격자판의 i번째 행을 k칸 움직였다면 정수 1과 i와 k를 빈칸을 사이에 두고 한 줄에 출력한다. 

그리고 격자판의 i번째 열을k칸 움직였다면 정수2와 i와k를 빈칸을 사이에 두고 한 줄에 출력한다. 

여기서 i는 1 이상 4 이하, k는 1 이상3이하의 정수이다. 


*주의 사항 

앞에서 설명한 방법에 따라 한 행 또는 한 열의 타일을 움직이는 것은 움직이는 칸수와 관계없이 한 번으로 간주한다. 

주어진 모든 입력은 최소 1번 최대 7번 타일을 움직이면 그림 1과 같이 타일이놓이게 할 수 있다.


입력 예

1 2 15 4
7 8 3 6
9 10 5 12
13 14 11 16

출력 예

2
2 3 3
1 2 2


백트래킹

경기도 안양시 동안구 평촌대로 109 협성골드프라자 601호

TEL : 031-360-4144 FAX : 031-388-0996 E-mail : hancomc@hotmail.com, comkiwer@naver.com

Copyrightⓒ 2010-2019 jungol. All right reserved.

TOP