[Python] baekjoon 7785 : 회사에 있는 사람

2024. 2. 13. 15:35코딩

 

 

 

How ?  

기본적으로 집합 , 맵의 카테고리에 속하는 문제이기 때문에 map을 사용해서 문자열을 처리해야한다는 생각은 하고있었다.

첫번째로 sys를 사용하지않고 그냥 input()을 사용해서 시간초과가 난건가 싶었지만 그건 아니였고,

두번째로 list를 사용하여 append와 remove를 사용하여 사용자의 출근과 퇴근을 처리해주었다.

하지만 이는 시간초과로 이어지게 되었다.

 

이름을 탐색하고 추가/제거할 때 리스트 전체를 탐색하고 있기 때문이다.

리스트의 크기가 커질수록 이 작업은 선형 시간이 걸리므로 시간이 많이 소요될 수 있다. 그렇기 때문에 딕셔너리를 사용해주도록 하자.

 

또한 문제를 보면 정렬을 하라고 적혀있다. 딕셔너리의 key를 기준으로 정렬해줄 때는 다음과같은 형식을 사용하도록 하자

sorted_names = sorted(name_state.keys(), reverse=True)

 

 

Code 

import sys

a=int(sys.stdin.readline())
enter_list={}

for _ in range(a):
    name,state=map(str,sys.stdin.readline().split())
    if state == 'enter':
        if name not in enter_list:
            enter_list[name]=state
    elif state == 'leave':
        if name in enter_list:
            del enter_list[name]

sorted_names = sorted(enter_list.keys(), reverse=True)
#딕셔너리를 정렬할 때는 key를 가져와서 reverse 사용하기
for name in sorted_names:
    print(name)

# 왜 시간초과가 날까