https://www.acmicpc.net/problem/7785
n = int(input())
log = []
for _ in range(n):
log.append(tuple(map(str, input().split())))
check = set()
stay = []
for a, b in reversed(log):
if not a in check:
check.add(a)
stay.append((a, b))
ans = [x[0] for x in stay if x[1] != 'leave']
ans.sort(reverse=True)
for x in ans:
print(x)
1. log에 tuple 형태로 값을 받은 뒤 (예: [(Baha, enter), (Askar, enter)] 역으로 for문을 돌려줍니다. (reverse)
=> leave를 체크하기 위함입니다.
2. check라는 이름의 set을 만들어서 해당 set에 사람 이름이 없으면 넣고, stay라는 list에 그 사람의 tuple값을 넣어줍니다 (이름, enter/leave).
3. stay에서 특정 사람이 leave만 입력되어 있으면 제거합니다 (즉, 2번에서 이미 leave가 있는 사람은 stay list에 들어갔기 때문에 그 이후 enter와 같이 들어가지 않습니다).
4. 사전 역순으로 섞어준 후 출력합니다.
'Algorithm' 카테고리의 다른 글
[파이썬] 백준 1436번: 영화감독 숌 (0) | 2023.11.21 |
---|---|
[파이썬] 백준 1158번: 요세푸스 문제 (0) | 2023.11.19 |
[파이썬] 백준 1292번: 쉽게 푸는 문제 (0) | 2023.11.05 |
[파이썬] 백준 1316번: 그룹 단어 체커 (0) | 2023.11.03 |
[파이썬] 백준 9613번: GCD합 (0) | 2023.09.16 |