function solution(participant, completion) {
let answer;
const newMap = completion.reduce((acc, cur) => {
acc.set(cur, acc.has(cur) ? acc.get(cur) + 1 : 1);
return acc;
}, new Map());
for (const val of participant)
newMap.has(val)
? newMap.set(val, newMap.get(val) - 1)
: (answer = val);
if (newMap.get(val) < 0) answer = val;
}
return answer;
}
const newMap = completion.reduce((acc, cur) => {
acc.set(cur, acc.has(cur) ? acc.get(cur) + 1 : 1);
return acc;
}, new Map());
for (const val of participant)
newMap.has(val)
? newMap.set(val, newMap.get(val) - 1)
: (answer = val);
if (newMap.get(val) < 0) answer = val;
!newMap.has(val)
-- 참가선수 이름이 완주한 선수 리스트에 없는 경우
newMap.get(val) < 0
-- 완주 선수(key)의 명수(value)가 음수인 경우 (동명이인이 완주 하지 못할 떄 적용된다.)
처음엔 해시에 대해서 하나도 지식이 없던 상태라 반복문 썼다가 효율성 검사에서 무한로딩으로 쫓겨났다. 그 뒤로 해시 알고리즘에 대해서 찾아보고 키 값을 통해 값을 가져오는 것이 더 빠르게 가져올 수 있다는 걸 알았다. 키값으로 풀이하는 법 중 map 함수를 사용하였는데, 덜 익숙한 함수라 손에 익히기 위해 map으로 문제를 풀어보았다. 효율성 검사에서 조마조마 했지만 다행히 통과 되었다.😅