[BOJ/python] 19583: 싸이버개강총회

songeunm·2024년 9월 25일

PS - python

목록 보기
10/62
post-thumbnail

문제

✔️ silver 2
구현
자료 구조
문자열
해시를 사용한 집합과 맵

문제 흐름

예제 입력2에서 제때 퇴장을 안찍어서 출석 날아간 나같은 느낌이 강하게 들었다..

  1. 개총 시작시간s, 종료시간e, 스트리밍 종료시간q를 모두 분단위로 계산해준다.
  2. 채팅 로그를 try-except를 이용해 비정상 입력이 들어올 때까지 모두 받는다.
  3. 입력이 개총 시작시간 전이라면 names 집합에 넣어 입장을 체크한다.
  4. 개총 종료시간과 스트리밍 종료시간 사이라면 names 집합에 있는 경우(= 입장한 사람인 경우) 퇴장 체크를 하고 중복 퇴장이 되지 않도록 names에서 이름을 제거한다.

코드

# 싸이버개강총회
# hash

import sys
input = sys.stdin.readline

def to_seconds(t: str):
    m, s = map(int, t.split(':'))
    return m * 60 + s

if __name__ == "__main__":
    s, e, q = input().split()
    s_sec = to_seconds(s)
    e_sec = to_seconds(e)
    q_sec = to_seconds(q)

    names = set()
    count = 0
    while 1:
        try:
            t, name = input().split()
            t_sec = to_seconds(t)
            # 입장 체크
            if t_sec <= s_sec:
                names.add(name)
            # 퇴장 체크
            elif e_sec <= t_sec <= q_sec:
                if name in names:
                    names.remove(name)
                    count += 1
        except Exception as e:
            # print(e)
            break
    
    print(count)

마무리

사실은 예제 입력2가 있는줄 모르고 한참 반례를 찾아 헤맸다.
결국은 중복 퇴장을 체크하지 않은 문제였다.
문제는 역시 꼼꼼히 읽어야한다.

profile
데굴데굴 구르는 개발자 지망생

0개의 댓글