문제
https://school.programmers.co.kr/learn/courses/30/lessons/42576
알고리즘 - 해시함수
해쉬 함수는 다양한 길이를 가지고 있는 key를, 일정한 길이의 해시로 바꿔주어(key의 길이 > hash의 길이) 공간을 효율적으로 관리할 수 있도록 하는 함수이다. 해시 충돌(Hash Collision)을 최소화 하는 해시 함수를 만드는 것이 중요하다. 해시: 해시 함수의 결과 값을 의미한다. 저장소(bucket)에서, 값(value)와 매칭되어 저장된다. 해시 함수에 key를 적용해 나온 결과인 해시를 버킷 배열의 인덱스로 하고, 그 자리에 value를 저장한다.
풀이
function solution(participant, completion) {
participant.sort();
completion.sort();
for (let i in participant) {
if (participant[i] !== completion[i]) return participant[i];
}
}
풀이 회고
이 문제는 해시 맵을 사용해서 map으로 참가자를 완주했는지 맵핑하는 풀이가 문제의 의도였다. sort하는 방법보다 효율적인 풀이이다.
다른 사람의 풀이
function solution(participant, completion) {
const map = new Map();
for(let i = 0; i < participant.length; i++) {
let a = participant[i],
b = completion[i];
map.set(a, (map.get(a) || 0) + 1);
map.set(b, (map.get(b) || 0) - 1);
}
for(let [k, v] of map) {
if(v > 0) return k;
}
return 'nothing';
}
새롭게 알게된 것
완주 유무를 더하기 뺴기로 계산하는 방법
for(let [k, v] of map)
: map.map((k,v) => {if(v > 0) return k)}