코딩테스트

[백준/파이썬] 2002 추월

Sun0727 2023. 1. 3. 23:34

#문제링크

https://www.acmicpc.net/problem/2002

 

2002번: 추월

입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이

www.acmicpc.net

#나의풀이

import sys

if __name__=="__main__":
    T = int(sys.stdin.readline())

    ent = {}
    exit = []

    for i in range(T):
        tmp = sys.stdin.readline().strip()
        ent[tmp] = i
    for _ in range(T):
        exit.append(sys.stdin.readline().strip())

    answer = 0

    for i in range(T-1):
        for j in range(i+1, T):
            if ent[exit[i]] > ent[exit[j]]:
                answer += 1
                break

    print(answer)

#해설

오랜만에 풀어서 그런지 난이도가 낮은데 풀지 못했다.

각 차량번호를 가진 트럭이 터널을 통과하고 나온 순서를 보고 자신의 순번에 맞지 않게 추월해서 나온 트럭의 개수를 찾는 문제이다.

처음에는 두개다 딕셔너리로 해서 비교하면 되지 않을까 생각했는데 뒤에 통과한 트럭을 입력받는것에서 한대만 추월해도 그 뒤에 있는 값들을 비교하는게 의미없다 라는걸 깨닳았다.

풀이 방법은 터널에 입장하는 트럭에 순서만 딕셔너리로 저장해준다.

 

첫번째 예제로 예를들면

ZG431SN : 0 ZG5080K : 1 ST123D : 2 ZG206A : 3

 들어온 순서를 저장하고 이후 나간 트럭들 그대로 배열에 저장하여 비교를 해준다

 

나간 순서로 ZG206A가 제일 먼저 나왔으니 ZG206A의 순서와 남은 뒤에 3개의 순서를 비교하여 만약 ZG206A 순서가 뒤에 있는 트럭들의 순서보다 더 앞서있게 나왔다면 count를 +1을 해주고 ZG206A는 추월했으므로 더이상 비교를 마치고 break를 해준다. 이후 나머지도 똑같이 반복하여 결과를 출력한다

 

#참고

https://hbj0209.tistory.com/115

 

[Python] BOJ 2002 - 추월(TUNNEL)

https://www.acmicpc.net/problem/2002 2002번: 추월 입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주

hbj0209.tistory.com