[BOJ] 7785 | 회사에 있는 사람

Gaanii·2024년 10월 18일
1

Problem Solving

목록 보기
45/210
post-thumbnail

아래 백준 로고를 클릭하면 해당 문제로 이동합니다 😀

BOJ 로고



풀이과정


단순하게 일단 리스트에 다 넣고 leave가 나왔을 때 리스트에서 제거해주는 방법을 생각했다. ㅎㅎ이렇게 쉽게 풀리겠냐구요 ~

n = int(input())

members = []
for i in range(n):
   name, status = input().split()
   if status == 'enter':
       members.append(name)
   else:
   	   members.remove(name)

members.sort(reverse=True)

for name in members:
    print(name)

당연히 안된다. 리스트에서 저렇게 찾아내려면 앞에서부터 냅다 돌아다니면서 찾기때문에 메모리님께서 화를 내시기 때문이지요 ...
시간초과

그래서 생각한건 dictionary를 이용해보자 ! 였다.
아무래도 리스트로 해서 미어터지는 메모리를 딕셔너리를 이용하면 매우매우 빠르게 동작할 수 있다고 생각했기 때문이다.

그래서 이름과 상태를 입력받고, 일단 딕셔너리에 다 넣는다.
그리고 만약에 상태가 leave라면 딕셔너리에서 제거해주는 과정을 만들어줬다.

그리고 마지막에 사전 역순으로 뒤집고 딕셔너리로 다시 바꿔서 key값들만 출력하면 될것같았다.

코드


n = int(input())
members = {}
for _ in range(n):
    name, status = input().split()
    members[name] = status

    if status == 'leave':
        del members[name]

result = sorted(members.items(), reverse=True)
result = dict(result)

for key in result.keys():
    print(key)


결과


정답

0개의 댓글