Programming/백준
[실버 5] 백준 27111 - 출입 기록 (파이썬)
pental
2025. 5. 14. 17:10
https://www.acmicpc.net/problem/27111
풀이
- 어떤 사람들이 출입기록을 남긴다.
- 입력: 사람 번호 a, 출입 여부 b (1 = 입장, 0 = 퇴장)
- 정상적인 경우:
- 입장 기록 없이 퇴장 ❌
- 이미 입장한 상태에서 또 입장 ❌
- 비정상적인 경우의 수를 출력하라.
bude = set()
count = 0
bude는 현재 안에 있는 사람들의 번호를 저장하는 set
count는 비정상적인 출입 횟수를 저장하는 변수이다.
for _ in range(N):
a, b = map(int, input().split())
a는 사람번호, b는 출입 여부
if b == 1:
if a in bude:
count += 1 # 이미 안에 있는데 또 입장 → 비정상
else:
bude.add(a) # 정상 입장
if b == 0:
if a not in bude:
count += 1 # 입장한 적 없는데 퇴장 → 비정상
else:
bude.remove(a) # 정상 퇴장
마지막에는 지금까지 발견한 비정상 출입 기록 수를 출력한다.
문제에서는 마지막에 아직 안 나간 사람도 고려해야하므로, 마지막에 count += len(bude)를 통해서 고려한다.
bude에 남아 있는 사람들은 입장만 하고 퇴장하지 않은 사람들이므로, 이들도 비정상이기 때문이다.
코드
# 백준 27111 - 출입 기록
# 분류 : 자료구조
import sys
input = sys.stdin.readline
N = int(input())
bude = set()
count = 0
for _ in range(N) :
a, b = map(int, input().split())
if b == 1 :
if a in bude :
count += 1
else :
bude.add(a)
if b == 0 :
if a not in bude :
count += 1
else :
bude.remove(a)
count += len(bude)
print(count)