해시함수는
해시함수는 문자열에 대해 숫자를 할당함으로써 일정 문자열을 입력했을 때, 값을 빠르게 반환하는 특징을 가지고 있다. (like 유능한 비서!)
문자열(키)로 값이 저장된 위치를 정확하게 알려주기 때문에 탐색을 할 필요가 없다. 그렇기 때문에 중복되는 키는 사용할 수 없다. 또한 중복을 확인하는 것도 array(배열)에 비해 훨씬 빠르다.
해시함수는 웹의 주소에 IP를 할당하는 작업인 DNS 확인 작업이나, 웹사이트 정보를 잠시 저장했다가 알려주는 캐싱에도 로딩 시간을 효과적으로 줄여줌으로써 유용하게 쓰인다.
따라서, 아래와 같은 때에 유용하다.
- 어떤 것을 다른 것과 연관시키고자 할 때
- 무언가를 찾아보고자 할 때
파이썬에서는 딕셔너리{} 가 해시테이블에 해당한다. 해시함수는 배열의 크기가 얼마나 큰 지 알고 있어야 하며, 유효한 인덱스만 반환해야 한다.
문제
참가자 목록과 완주자 목록이 있다. 이 중 완주하지 못한 단 한명의 선수 이름을 출력하라.
내 코드
for를 세 번이나 쓰면서 탐색하는데, 통과는 했다. 오히려 sort 함수를 써서 돌리는게 훨씬 간결해졌을 것 같다. lv1 문제라 시간 제한이 넉넉했나보다.
def solution(p, c):
answer = ''
dic = {}
for i in p:
if i in dic.keys():
dic[i]+=1
else:
dic[i] = 1
for cc in c:
dic[cc] -=1
for d in dic:
if dic[d] == 1:
answer = d
return answer
다른 사람 코드
def solution(participant, completion):
participant.sort()
completion.sort()
for i in range(len(completion)):
if participant[i] != completion[i]:
return participant[i]
return participant[len(participant)-1]
직관적이고 따라할 만한 코드다. 잘 기억해둬야지.
import collections
def solution(participant, completion):
answer = collections.Counter(participant) - collections.Counter(completion)
return list(answer.keys())[0]
from collections import Counter 가 생각보다, 활용도가 높은 것 같은데 아직 잘 쓸 줄을 모르니 메모해둔다.
'⚡️algorithm' 카테고리의 다른 글
[해쉬] 프로그래머스 lv2. 전화번호 목록 (0) | 2022.05.20 |
---|---|
[해쉬] 프로그래머스 lv2. 위장 (1) | 2022.05.20 |
[DP] 백준 2208. 보석줍기 (1) | 2022.05.19 |
프로그래머스 징검다리 - ing (0) | 2022.05.18 |
[DP] 백준 10211. Maximum Subarray (0) | 2022.05.18 |