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)