본문 바로가기
코딩 테스트/Python_백준

[백준/Python] 7785번 회사에 있는 사람 문제

by 모두의 케빈 2023. 5. 27.

■ 7785번 회사에 있는 사람 문제

 

출처: 백준 7785번 회사에 있는 사람 문제

 

 

■ 코드 풀이

 

저는 이 문제를 딕셔너리를 활용하여 풀었습니다. 기본적으로 파이썬에서 문자열 탐색은 set이나 dict 자료유형이 속도 측면에서 유리합니다. 그 이유는 해시 테이블(hash table)을 사용하기 때문인데요. 임의의 단어를 숫자로 맵핑하고 이를 인덱스처럼 활용해서 속도가 빠르다고 합니다. (아래 링크의 글에서 제가 처음 배웠기 때문에, 거기에 자세히 적어두었습니다.)

우선 출입 기록을 저장할 수 있는 딕셔너리(record_dict)를 선언합니다. 그리고 사람의 이름을 key값으로 상태가 enter이면 True를, leave이면 False를 value로 저장합니다. 그럼 결과적으로 출입 기록에 'leave'가 없는 사람의 value만 True가 됩니다. 사전의 역순으로 출력해야 하므로 사람 이름(dict의 key)을 역순으로 정렬하고 차례대로 for문을 돌면서 value가 True인 사람만 출력하면 문제를 풀 수 있습니다.

import sys

N = int(sys.stdin.readline().strip())

record_dict = dict()

for _ in range(N):
    name, record = sys.stdin.readline().split()
    if record == 'enter': # 상태가 enter, 즉 남아있는 사람만 True로 설정
        record_dict[name] = True
    else:
        record_dict[name] = False


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

 

 

[참고] 파이썬에서 set과 dict가 빠른 이유를 처음 알게 된 문제

 

[백준/Python] 14425번 문자열 집합 문제

 

[백준/Python] 14425번 문자열 집합 문제

■ 14425번 문자열 집합 문제 ■ 코드 풀이 처음에는 리스트를 활용하여 풀었습니다. 시간 초과는 나오지 않았지만, 상당히 시간이 오래 걸렸습니다. 코드 개선을 위해 다른 분들의 글을 참고하니

kevinitcoding.tistory.com

 

댓글