Hello Computer Vision

백준 알고리즘 7785번 [회사에 있는 사람] 파이썬 본문

백준알고리즘

백준 알고리즘 7785번 [회사에 있는 사람] 파이썬

지웅쓰 2023. 4. 23. 22:45

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

 

7785번: 회사에 있는 사람

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

www.acmicpc.net

일단 시간제한이 있어서 리스트를 이용해 풀면 안되겠다고 1차적으로 생각했다. 그래서 첫번째 코드대로 풀었는데 시간초과가 났는데 내가봐도 코드가 지저분하긴 하다. 그래서 다른 분들의 풀이를 한번 살펴봤다.

n = int(input())
dic_ = {}
name_list = []
for i in range(n):
    name, inout = input().split()
    name_list.append(name)
    name_list = list(set(name_list))
    if inout == 'enter':
        dic_[name] = 1
    else:
        dic_[name] = 0
new_list = []
for i in range(len(dic_)):
    if dic_[name_list[i]] == 1:
        new_list.append(name_list[i])
new_list = sorted(new_list, reverse = True)

for i in new_list:
    print(i)

우선 내 코드에서는 0, 1을 따로 다 지정해주었는데 여기서는 enter이 아닐 경우(leave) dict에서 해당 사람을 제외시켰다. 그리고 sorted를 이용해 dict의 key를 기준으로 정렬해 주었다. 우선 내 코드의 아쉬운 점은 0,1을 따로 지정해주어 이를 확인위해 for문을 돌리고 if문까지 돌려야한다는 단점들이 있다.

n = int(input())
dic_ = {}
name_list = []
for i in range(n):
    name, inout = input().split()

    if inout == 'enter':
        dic_[name] = 1
    else:
        del dic_[name]

dic_ = sorted(dic_.keys(), reverse =True )
for i in dic_:
    print(i)