

1) 해시 함수를 사용
2) 해시의 특징
3) 활용
➕ 참조:
https://en.wikipedia.org/wiki/Hash_table
https://en.wikipedia.org/wiki/Hash_function
https://ko.wikipedia.org/wiki/생일_문제
https://en.wikipedia.org/wiki/Birthday_problem
https://en.wikipedia.org/wiki/Four_color_theorem
1) 해시 함수가 변환한 값을 인덱스로 활용해야 하므로 해시 테이블의 크기를 넘으면 안 된다.
2) 해시 함수가 변환한 값의 충돌은 최대한 적게 발생해야 함(충돌이 많이 발생할 수록 성능이 떨어짐)

1) 체이닝
2) 개방 주소법
선형 탐사 방식
이중 해싱 방식
코딩테스트에서는 해시를 구현할 일은 없다
- 키가 될 수 있는 것: immutable, 고유한 이름.
- tuple은 키가 될 수 있지만 list는 키가 될 수 없다. 이름을 활용해서 찾고 싶은 값.
- 코딩테스트에서 해시를 주로 사용하는 경우
1) 뭔가를 카운팅: dictionary, count
2) 존재 여부 확인: 참가자 명은 key로
3) 정보를 짝지어 저장 (mapping)
https://school.programmers.co.kr/learn/courses/30/lessons/42576
def solution(participant, completion):
table = {}
for i in participant:
if i not in table:
table[i] = 1
else:
table[i] += 1
for j in completion:
table[j] -= 1
# 꺼내는 게 문제..
for key in table.keys():
if table[key] > 0:
return key
참고) https://velog.io/@erdosnumber0/leetcode-771.Jewels-and-Stoneseasy
# counter 활용하기
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
개인적으로 왜 [0]이 있는걸까 의아했는데,
[0]이 없다면, ['미완주자'] 가 되었을 것이다.
list가 없었다면 dict_keys['미완주자']였을 것이고.
⌛시간 복잡도: 참가자 이름(N개)을 해시 테이블에 추가 ,
완주 참가자 이름(N-1개:문제 안에 1명을 제외하고 모두 완주한다는 얘기가 있으므로) 해시테이블에서 제외하는
고로, → 이지 않을까??? ❓❓❓❓
https://school.programmers.co.kr/learn/courses/30/lessons/131127
https://school.programmers.co.kr/learn/courses/30/lessons/42888
https://school.programmers.co.kr/learn/courses/30/lessons/42579
https://school.programmers.co.kr/learn/courses/30/lessons/72411
https://school.programmers.co.kr/learn/courses/30/lessons/42578
https://school.programmers.co.kr/learn/courses/30/lessons/17684