[python_파이썬_pass]백준_7785번_회사에 있는 사람_풀이

2024. 5. 11. 18:57코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/S9Tn1JM6-yc?feature=shared

일단 문제는 쉽게 느껴진다.

기본적으로 이 문제를 접하는 사람이라면 어느정도 실력이 쌓여서 올라 왔을테니...

 

시간이 1초로 조금 짧게 느껴졌지만 (하단참조) 이런게 없기에 일단 시간을 고려하지 않고 바로 리스트를 활용해서 문제를 풀었다.

 

<첫번째 시도 : 시간초과>

역시 list를 활용하니 시간초과를 예상했다. 그럼 다시 dict로 전환해준다.

#시간초과        
n = int(input())
member = []

for _ in range(n):
    A, B = input().split()
    if B == "enter":
        member.append(A)
    else:
        member.remove(A)

member.sort(reverse=True)

for i in member:
    print(i)

 

<두번째 시도 : 틀렸습니다.>

이것도 오름차순의 역순을 해주시 않았기에 틀릴 것으로 예상을 했다. 단, 예제는 순서를 정해주지 않아도 올바른 답을 출력하지만 조건에는 오름차순의 역순으로 출력하라는 조건이 있다.

#틀렸습니다. / 오름차순의 역순 안해줌
n = int(input())
member = dict()

for _ in range(n):
    A, B = input().split()
    if B == "enter":
        member[A] = 1
    else:
        member[A] = 0

for i in member.keys():
    if member[i]:
        print(i)

 

 

<세번째 시도 : 통과>

dict에 sort()는 사용할 수가 없다. sorted를 활용하자. keys()를 주면 키로 정렬, value()를 주면 값으로 정렬 된다.

items()를 줘도 일단 키를 기준으로 정렬된다.

import sys
input = sys.stdin.readline

n = int(input())
member = dict()

for _ in range(n):
    A, B = input().split()
    if B == "enter":
        member[A] = 1
    else:
        member[A] = 0

for i in sorted(member.keys(), reverse=True):
    if member[i]:
        print(i)

 

 

<다른사람풀이 참조>

1. del member[A]를 해서 아예 지워주는 것도 방법이다.

n = int(input())

record = {}

for _ in range(n):
    name, condition = input().split()
    if condition == "enter":
        record[name] = condition
    else:
        del record[name]
record = sorted(record,reverse = True)
for i in record:
    print((i))

 

2. 굳이? set과 dict와 list를 모두 사용하고 add, remove, append까지 사용했다.

    ㄴ 코드의 가독성은 별로이나 이 한 코드에 많은 함수가 담겨 있어 학습용으로 괜찮은 것 같다.

import sys
input = sys.stdin.readline

n = int(input())
employee = set()
dict1 = {"enter":1,"leave":0}
for i in range(0,n):
    name, status = map(str,input().rstrip().split())
    if dict1[status]:
        employee.add(name)
    else:
        employee.remove(name)
arr = list()
for i in employee:
    arr.append(i)
arr.sort()
for i in range(0,len(arr)):
    print(arr[len(arr) - i - 1])
728x90
반응형