[Silver II] 싸이버개강총회 - 19583
[문제 링크](https://www.acmicpc.net/problem/19583)

💻 문제 정의
온라인 강의 시작 시간, 종료 시간, 온라인 강의가 닫히는 시간이 주어졌을 때, 사람들이 채팅을 친 시간을 바탕으로 강의 시작전, 그리고 종료 후 온라인 강의가 닫히기 전까지 남아있었던 사람들이 몇명인지를 알아내는 문제이다.
💡 접근 및 설계
우선 사람들이 채팅을 친 시간과 닉네임이 입력으로 주어진다. 따라서 조건문을 통해 해당 시간이 강의 시작, 종료 시간 범위에 존재하는지 여부를 판단할 필요가 있다.
여러 자료구조를 활용할 순 있겠지만, 이번 문제는 집합(set)을 활용해보겠다.
✏️ 알고리즘 풀이
def timetoint(time):
hh, mm = time.split(":")
return int(hh + mm)
S, E, Q = input().split()
start = timetoint(S)
end = timetoint(E)
streaming = timetoint(Q)
먼저 입력 처리 부분이다. 시간이 HH:MM 형태의 문자열로 주어지기 때문에 이를 전처리할 필요가 있다.
def timetoint(time):
return int(time.replace(":", ""))
start, end, streaming = map(timetoint, input().split())
조금 더 간단하게 다음과 같이 작성할 수도 있다!
attend = set()
exit = set()
while True:
try:
time, name = input().split()
time = timetoint(time)
if time <= start:
attend.add(name)
elif end <= time <= streaming:
exit.add(name)
except:
break
이후 출석 인원, 퇴장 인원을 저장할 공간을 정의하고, try-except문으로 EOF 처리를 한다. 이후 사람들이 채팅을 친 시간이 알맞은 범위에 존재한다면 해당 집합에 저장한다.
print(len(attend.intersection(exit)))
A.intersection(B)를 이용하여 attend집합과 exit집합의 합집합을 구한다. 합집합에는 출석과 퇴장을 알맞게 한 사람들 만이 들어가게 될 것이다. 최종적으로 합집합의 길이를 출력하면 된다.
🗒️ 최종 제출 코드
# 19538 싸이버개강총회
import sys
input = sys.stdin.readline
def timetoint(time):
# hh, mm = time.split(":")
# return int(hh + mm)
return int(time.replace(":", ""))
# S, E, Q = input().split()
# start = timetoint(S)
# end = timetoint(E)
# streaming = timetoint(Q)
start, end, streaming = map(timetoint, input().split())
attend = set()
exit = set()
while True:
try:
time, name = input().split()
time = timetoint(time)
if time <= start:
attend.add(name)
elif end <= time <= streaming:
exit.add(name)
except:
break
print(len(attend.intersection(exit)))
💭 오늘의 회고
집합과 입력 처리 방법에 대해 다시 한 번 공부하게 되는 문제였다. 문제의 알고리즘 자체는 큰 어려움 없는 문제라 생각한다. 이번 문제는 단순 알고리즘 보단 입력 처리, 자료구조 활용, EOF 처리 등 문제 외적 요소를 얼마나 잘 활용하느냐에 따라 실력이 갈릴 만한 문제인 것 같다는 생각이 들었다.
별 것 아닌 기술, 잡기술 같아 보여도 이러한 것 하나 더 아는것이 실전에서 시간을 단축해주는 팁이라 생각하고 오늘도 열심히 회고를 작성한다.
'Coding-Test > 백준' 카테고리의 다른 글
| [Python] 4375 1 (0) | 2026.01.09 |
|---|---|
| [Python] 3687 성냥개비 (0) | 2026.01.09 |
| [Python] 19538 루머 (0) | 2026.01.07 |
| [Python] 17404 - RGB거리 2 (3) | 2025.07.27 |
| [Python] 1504 - 특정한 최단 경로 (4) | 2025.07.17 |