[실버 5] 백준 27111 - 출입 기록 (파이썬)
글 작성자: pental
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)
'Programming > 백준' 카테고리의 다른 글
[브론즈 1] 백준 10448 - 유레카 이론 (파이썬) (0) | 2025.05.16 |
---|---|
[실버 3] 백준 23351 - 물 주기 (파이썬) (1) | 2025.05.15 |
[실버 1] 백준 15903 - 카드 합체 놀이 (파이썬) (0) | 2025.05.13 |
[골드 4] 백준 4803 - 트리 (파이썬) (0) | 2025.05.12 |
[골드 4] 백준 7662 - 이중 우선순위 큐 (파이썬) (0) | 2025.05.11 |
댓글
이 글 공유하기
다른 글
-
[브론즈 1] 백준 10448 - 유레카 이론 (파이썬)
[브론즈 1] 백준 10448 - 유레카 이론 (파이썬)
2025.05.16 -
[실버 3] 백준 23351 - 물 주기 (파이썬)
[실버 3] 백준 23351 - 물 주기 (파이썬)
2025.05.15 -
[실버 1] 백준 15903 - 카드 합체 놀이 (파이썬)
[실버 1] 백준 15903 - 카드 합체 놀이 (파이썬)
2025.05.13 -
[골드 4] 백준 4803 - 트리 (파이썬)
[골드 4] 백준 4803 - 트리 (파이썬)
2025.05.12