Coding Test/BaekJoon_Python

백준 7785 <회사에 있는 사람> Python

JunOnJuly 2023. 11. 25. 13:09
728x90

https://www.acmicpc.net/problem/7785

 

7785번: 회사에 있는 사람

첫째 줄에 로그에 기록된 출입 기록의 수 n이 주어진다. (2 ≤ n ≤ 106) 다음 n개의 줄에는 출입 기록이 순서대로 주어지며, 각 사람의 이름이 주어지고 "enter"나 "leave"가 주어진다. "enter"인 경우는

www.acmicpc.net


입력이 긴 문제의 경우 Input() 보다 sys.stdin.readline() 을 사용하는 것이 좋습니다. 그리고 readline 뒤에 \n 같은 공백 문자도 같이 입력되니 strip() 을 사용하면 깔끔하게 받아올 수 있습니다. 문제는 Dict 타입을 사용하면 쉽게 풀 수 있습니다.


import sys
from collections import defaultdict


def solution(n, data_list):
    # 출입 명부 딕셔너리
    in_out_dict = defaultdict(int)
    # 순회하면서 상태 최신화
    for name, state in data_list:
        if state == 'enter':
            in_out_dict[name] = 1
        else:
            in_out_dict[name] = 0
    # 딕셔너리 정렬
    in_out_dict = dict(sorted(in_out_dict.items(), reverse=True))
    # 순회하며 출력
    for key, value in in_out_dict.items():
        if value:
            print(key)    


n = int(input())
data_list = [sys.stdin.readline().strip().split(' ') for _ in range(n)]
solution(n, data_list)

 

728x90