백준 7785

soss·2022년 10월 11일
0
post-thumbnail
import sys

n = int(input())
ppl = {}

for i in range(n):
    key, value = sys.stdin.readline().split()
    ppl[key] = value

for key, value in list(ppl.items()): # list를 씌우지 않으면 런타임에러 발생
    if value == 'leave':
        del ppl[key]

ppl = sorted(ppl.keys(), reverse = True)

for i in ppl:
    print(i)

시행착오

#1
1. 반복문으로 배열에 추가
2. 이미 있는 요소면 제거 없다면 추가
3. 배열 역순으로 출력
= > 시간 초과

#2
1. 반복문으로 배열에 추가
2. 중복 요소 다 제거
3. 배열 역순으로 출력
= > 시간 초과

두 방법 다 풀이로 사용할 수 있었으나 시간 초과가 났던 이유는 리스트를 이용한 삭제 연산(list.remove()) 때문이였다. 딕셔너리를 이용해서 앞서 적었던 알고리즘을 구현하니 정답이 나왔다.

알게된 점

Hash Table의 장점 및 단점은 ?
장점
데이터 저장/읽기 속도가 빠르다. (검색 속도가 빠르다.)
해쉬는 키에 대한 데이터가 있는지(중복) 확인이 쉬움
단점
일반적으로 저장공간이 좀 더 많이 필요하다.
여러 키에 해당하는 주소가 동일할 경우 충돌을 해결하기 위한 별도 자료구조가 필요함
주요 용도
검색이 많이 필요한 경우
저장, 삭제, 읽기가 빈번한 경우
캐쉬 구현시 (중복 확인이 쉽기 때문)
list의 어떤 자료를 검색할 때 드는 시간복잡도 O(n)
Hash Table의 자료를 검색할 때 드는 시간복잡도 O(1)

profile
안녕하세요. 복습 목적으로 문제 풀이를 올리고 있습니다.

0개의 댓글