[Silver II] 미로 탈출 - 31834 (python)
애드 혹, 많은 조건 분기
주원이는 방 탈출을 하던 중 미로에 도착했다. 미로는 일렬로 놓인 N𝑁개의 방으로 이루어져 있으며, i𝑖번 방과 i+1번 방은 서로 인접해 있다(1≤i<N) 또한, 각 방에 스위치가 하나씩 있어, 주원이는 입구가 있는 S𝑆번 방에서 출발하여 모든 스위치를 누르고, 출구가 있는 E번 방으로 이동하여 탈출해야 한다.
주원이는 두 가지 이동 방법을 사용할 수 있다. 첫 번째는 0 만큼의 비용을 소모해 인접한 방으로 이동하는 것이고, 두 번째는 1 만큼의 비용을 소모해 11번 또는 N번 방으로 순간 이동하는 것이다. 두 이동 방법 모두 매번 1 만큼의 시간이 소요된다. 스위치를 누르는 건 매번 0 만큼의 시간이 소요된다.
방 탈출에서 탈출하기 위해선 시간을 잘 관리해야 하므로 주원이는 최대한 빠르게 미로를 탈출하는 방법을 찾으려고 한다. 기록을 세우고 싶은 주원이를 위해서 가장 빠르게 미로를 탈출하는 방법 중 최소 비용으로 탈출하는 방법을 찾아주자.
첫째 줄에 테스트 케이스의 개수 T가 주어진다.
다음 줄부터 각 테스트 케이스마다 N, S, E이 한 줄에 공백으로 구분되어 주어진다.
각 테스트 케이스에 대해 가능한 최소 비용을 한 줄에 출력한다.
코드
import sys
input = sys.stdin.readline
for i in range(int(input())):
n, s, e = map(int, input().split())
if (s == 1 and e == n) or (s == n and e == 1):
print(0)
elif 1 < s < n:
if abs(s-e) == 1:
print(1)
else:
print(2)
elif 1 < e < n:
print(1)
1. 시작과 도착이 서로 끝에 있는 경우 비용은 0이 된다.
2. 시작이 중간에서 시작할 경우
2-1. 시작과 중간의 차이가 1일 때
예) 5 3 4
3 -> 2 -> 1 => 5 -> 4 비용은 1이 최소가 된다
2-2. 시작과 중간 사이 누르지 않은 버튼이 있는 경우 2가 된다.
3. 시작이 양 끝 중 하나에 있는 경우 최소 비용은 1이 된다.