2002번: 추월
입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이
www.acmicpc.net
문제
대한민국을 비롯한 대부분의 나라에서는 터널 내에서의 차선 변경을 법률로 금하고 있다. 조금만 관찰력이 있는 학생이라면 터널 내부에서는 차선이 파선이 아닌 실선으로 되어 있다는 것을 알고 있을 것이다. 이는 차선을 변경할 수 없음을 말하는 것이고, 따라서 터널 내부에서의 추월은 불가능하다.
소문난 명콤비 경찰 대근이와 영식이가 추월하는 차량을 잡기 위해 한 터널에 투입되었다. 대근이는 터널의 입구에, 영식이는 터널의 출구에 각각 잠복하고, 대근이는 차가 터널에 들어가는 순서대로, 영식이는 차가 터널에서 나오는 순서대로 각각 차량 번호를 적어 두었다.
N개의 차량이 지나간 후, 대근이와 영식이는 자신들이 적어 둔 차량 번호의 목록을 보고, 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차들이 몇 대 있다는 것을 알게 되었다. 대근이와 영식이를 도와 이를 구하는 프로그램을 작성해 보자.
입력
입력은 총 2N+1개의 줄로 이루어져 있다. 첫 줄에는 차의 대수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 대근이가 적은 차량 번호 목록이 주어지고, N+2째 줄부터 N개의 줄에는 영식이가 적은 차량 번호 목록이 주어진다. 각 차량 번호는 6글자 이상 8글자 이하의 문자열로, 영어 대문자('A'-'Z')와 숫자('0'-'9')로만 이루어져 있다.
같은 차량 번호가 두 번 이상 주어지는 경우는 없다.
출력
첫째 줄에 터널 내부에서 반드시 추월을 했을 것으로 여겨지는 차가 몇 대인지 출력한다.
과정
- 차의 대수 n 을 입력받는다.
- 터널을 들어온 차와 나간 차를 각각 n개씩 입력받는다.
- 터널에 들어온 순서보다 먼저 나가는 경우 카운트 해준다.
- deque를 활용해 들어온 순서대로 넣어주고 처음값과 나간값이 다르면 cnt해주고 remove
- 같으면 popleft() 해주며 확인한다.
예제 입력
4
ZG431SN
ZG5080K
ST123D
ZG206A
ZG206A
ZG431SN
ZG5080K
ST123D
예제 출력
1
풀이
import collections
import sys
input = sys.stdin.readline
n = int(input())
q = collections.deque()
cnt = 0
for i in range(n*2):
if i < n:
q.append(input())
else:
out = input()
if q[0] != out:
q.remove(out)
cnt += 1
else:
q.popleft()
print(cnt)
한 줄씩 해석해보기
n = int(input())
q = collections.deque()
cnt = 0
- 차의 대수 n을 입력받는다.
- 데크를 활용해 나간 순서대로 pop해준다.
- 결과를 출력할 cnt 변수를 생성한다.
for i in range(n*2):
if i < n:
q.append(input())
- 들어오고 나간차를 각각 입력받기 때문에 n*2번 반복문을 돌린다.
- i 가 n 보다 작으면 들어오는 차이기 때문에 q에 append해준다.
else:
out = input()
if q[0] != out:
q.remove(out)
cnt += 1
else:
q.popleft()
- 그 이후는 나가는 차이기 때문에 out이라는 변수에 넣고 하나씩 확인한다.
- 만약 q의 맨 처음이 out이 아니라면
- q에서 out을 제거하고 cnt 를 하나 올려준다.
- out q의 처음이 맞다면 popleft() 해준다.
print(cnt)
- for문이 끝나면 cnt를 출력한다.
'코딩 테스트 (Python) > 백준' 카테고리의 다른 글
[백준] 4949번 균형잡힌 세상 (Python) (1) | 2024.01.09 |
---|---|
[백준] 15903 카드 합체 놀이 (Python) (1) | 2024.01.09 |
[백준] 2504번 괄호의 값 (Python) (0) | 2024.01.08 |
[백준] 5397번 키로거 (Python) (1) | 2024.01.08 |
[백준] 14888번 연산자 끼워넣기 (Python) (0) | 2024.01.06 |