1. 문제 요약
온라인 스트리밍으로 진행된 개강총회에서
출석 인정 조건은 다음과 같다.
1) 입장 확인
- 시작 시간 S 이전 또는 정확히 S 시각에 채팅한 사람
2) 퇴장 확인
- 종료 시간 E 이후부터 스트리밍 종료 Q까지 채팅한 사람
즉,
S 이전에 채팅 + E~Q 사이에 채팅
둘 다 만족하는 사람 수를 구하는 문제
2. 접근 아이디어
이 문제는 딱 보면 복잡해 보이지만 핵심은 단순하다.
→ 사람을 두 번 필터링하면 된다.
1) 입장 체크
time <= S
→ 이때 채팅한 사람들을 enter 집합에 저장
2) 퇴장 체크
E <= time <= Q
이때 채팅한 사람 중에서 이미 enter에 있었던 사람만 카운트
3. 핵심 포인트
1) 입력 끝 처리
이 문제는 채팅 개수가 안 주어짐
해결방법:
for line in sys.stdin:
이유:
- EOF(입력 끝)까지 자동으로 읽음
- 따로 개수 안 세도 됨
2) 시간 비교 (핵심 트릭)
"06:00" < "12:00"
문자열 비교로도 시간 비교 가능
이유:
- HH:MM 형식 (항상 두 자리)
- 사전순 == 시간순
3) set 사용 이유
enter = set()
leave = set()
이유:
- 중복 제거 자동
- 빠른 탐색 (O(1))
4. 최종 코드
import sys
S, E, Q = input().split()
enter = set()
leave = set()
for line in sys.stdin:
time, name = line.split()
if time <= S:
enter.add(name)
if E <= time <= Q:
if name in enter:
leave.add(name)
print(len(leave))
5. 시간 복잡도
O(N)
이유:
- 한 번 순회
- set 탐색 O(1)
'코딩테스트' 카테고리의 다른 글
| [백준] 2493번 - 탑 (0) | 2026.03.30 |
|---|---|
| [백준] 20166번 - 문자열 지옥에 빠진 호석 (3) | 2026.03.26 |
| [백준] 16165번 - 걸그룹 마스터 준석이 (0) | 2026.03.24 |
| [백준] 13414번 - 수강신청 (0) | 2026.03.23 |
| [백준] 16139 - 인간-컴퓨터 상호작용 (0) | 2026.03.20 |