셔틀 로봇의 이동 횟수
문제
자동 창고의 선반이 l행 l열의 격자로 놓여 있다. 행과 열의 번호는 모두 0부터 시작하므로, 각 번호는 0 이상 l-1 이하다. 선반 사이를 오가는 셔틀 로봇이 한 대 있다.
로봇은 레일 구조 때문에 한 번 움직일 때 반드시 한 축으로 두 칸, 다른 축으로 한 칸을 간다. 중간에 지나가는 칸은 공중의 레일을 타고 넘으므로 무엇이 놓여 있든 상관이 없다. 따라서 로봇이 어떤 칸에서 한 번 움직여 갈 수 있는 자리는 다음의 여덟 곳이다.
| 행의 변화 | -2 | -2 | -1 | -1 | 1 | 1 | 2 | 2 |
|---|---|---|---|---|---|---|---|---|
| 열의 변화 | -1 | 1 | -2 | 2 | -2 | 2 | -1 | 1 |
여덟 곳 가운데 격자를 벗어나는 자리로는 갈 수 없다. 격자 안에는 로봇을 막는 것이 없으므로, 격자 안의 자리라면 어디로든 한 번에 뛸 수 있다.
로봇이 서 있는 칸과 짐을 내려야 하는 칸이 주어졌을 때, 최소 몇 번 움직이면 되는지 계산하는 프로그램을 작성하여라. 창고 여러 곳에 대한 정보가 차례대로 주어지므로 각 창고마다 답을 구해야 한다.
예를 들어 l=3인 창고에서 로봇이 (0, 2)에 서 있고 (2, 0)에 짐을 내려야 한다고 해보자. 로봇이 서 있는 칸은 "S", 짐을 내려야 하는 칸은 "T", 나머지 빈 칸은 "."으로 적었다.
| . | . | S |
|---|---|---|
| . | . | . |
| T | . | . |
(0, 2)에서 한 번에 갈 수 있는 자리는 (1, 0)과 (2, 1) 두 곳뿐이고 둘 다 목표 칸이 아니다. 다음과 같이 네 번 움직이면 도달한다.
| 움직인 횟수 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 로봇의 위치 | (0, 2) | (1, 0) | (2, 2) | (0, 1) | (2, 0) |
세 번 이하로 도달하는 방법은 없다. 따라서 이 예시에서의 정답은 4다.
입출력 예시
예시 1
입력
1 3 0 2 2 0
출력
4
예시 2
입력
1 8 1 6 2 4
출력
1
예시 3
입력
3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1
출력
5 28 0
입력 조건
가장 먼저 창고의 수 T가 자연수로 주어진다. T는 1 이상 5 이하의 자연수다.
이어서 T개의 창고에 대한 정보가 차례대로 주어지며, 각 창고의 정보는 세 줄로 이루어진다. 첫 줄에는 격자의 한 변의 크기 l이 주어진다. l은 3 이상 300 이하의 자연수다. 다음 줄에는 로봇이 서 있는 칸의 행과 열이 공백으로 구분되어 주어진다. 다음 줄에는 짐을 내려야 하는 칸의 행과 열이 공백으로 구분되어 주어진다. 행과 열은 모두 0 이상 l-1 이하의 정수이며, 두 칸이 서로 같을 수도 있다.
출력 조건
각 창고마다 로봇이 짐을 내려야 하는 칸까지 가기 위한 최소 이동 횟수를 한 줄에 하나씩 차례대로 출력한다. 서 있는 칸과 짐을 내려야 하는 칸이 같다면 0을 출력한다. 어떻게 움직여도 도달할 수 없다면 그 줄에는 -1을 출력한다.
요구사항
- 한 번의 움직임은 한 축으로 두 칸, 다른 축으로 한 칸입니다
- 여덟 가지 자리 가운데 격자를 벗어나는 곳으로는 갈 수 없습니다
- 격자 안에 로봇을 막는 것은 없습니다
- 창고마다 최소 이동 횟수를 한 줄에 하나씩 차례대로 출력합니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 15개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 15개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.
1 8 1 6 2 4
1
1 3 0 2 2 0
4
3 8 0 0 7 0 100 0 0 30 50 10 1 1 1 1
5 28 0
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.