알고리즘/백준

[Silver II] 미로 탈출 - 31834 (python)

KimMinGyun 2024. 7. 3. 09:03

문제 링크

 

 

분류

애드 혹, 많은 조건 분기

 

문제 설명

주원이는 방 탈출을 하던 중 미로에 도착했다. 미로는 일렬로 놓인 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이 된다.