알고리즘

[백준] 2002 - 추월

j9972 2023. 5. 17. 17:36
728x90

1. 문제

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

 

2002번: 추월

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

www.acmicpc.net

 

2. 접근

1. 데이터를 받아올 때 인덱스 값을 통해서 그 값을 통해 출구를 나갈때 차들의 순서를 확인하려고 한다

2. 입구와 출구를 left, right로 나눠서 보자

3. LIS를 로직으로 출구에서 나오는 차들의 idx를 파악해보자 그러면 답이 나온다

 

또 다른 방법은 

-> 1~n까지는 dict 에 넣고 n+1 ~2*n까지는 stack에 넣어서 판단을 해볼 수 있다.

 

3. 풀이

# 2002 실버1
import sys
input = sys.stdin.readline

n = int(input())

terminal = []
for i in range(1,(2*n)+1):
    car = input().rstrip()
    if i <= n:
        terminal.append([car, i])
    else:
        for j in range(len(terminal)):
            if car == terminal[j][0]:
                terminal.append([car, terminal[j][1]])

left = terminal[:n]
right = terminal[n:]
# print(left)
# print(right)

cnt = 0
for i in range(n-1):
    for j in range(i+1,n):
        if right[i][1] > right[j][1]:
            cnt += 1
            break
print(cnt)

 

또 다른 방법

N = int(input())
answer = 0
enter, out = dict(), []
for i in range(N):
	car = input()
	enter[car] = i
for _ in range(N):
	car = input()
	out.append(car)
 
for i in range(N-1):
	for j in range(i+1, N):
		if enter[out[i]] > enter[out[j]]:
			answer += 1
			break
print(answer)