[Python] 19583 싸이버개강총회

2026. 1. 8. 19:09·Coding-Test/백준
728x90
반응형

[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 처리 등 문제 외적 요소를 얼마나 잘 활용하느냐에 따라 실력이 갈릴 만한 문제인 것 같다는 생각이 들었다.

별 것 아닌 기술, 잡기술 같아 보여도 이러한 것 하나 더 아는것이 실전에서 시간을 단축해주는 팁이라 생각하고 오늘도 열심히 회고를 작성한다.

728x90
반응형
저작자표시 (새창열림)

'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
'Coding-Test/백준' 카테고리의 다른 글
  • [Python] 4375 1
  • [Python] 3687 성냥개비
  • [Python] 19538 루머
  • [Python] 17404 - RGB거리 2
희완
희완
희완한 코딩일상
    반응형
  • 희완
    Code-Heewan
    희완
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Python
        • 가상환경
      • Algorithm
      • Coding-Test
        • 백준
        • 프로그래머스
        • 항해99
      • Data-Analysis
      • 웹 개발
        • django
      • AWS
      • 공모전
      • Mobile
  • 링크

    • Github
  • 300x250
  • hELLO· Designed By정상우.v4.10.3
희완
[Python] 19583 싸이버개강총회
상단으로

티스토리툴바