개요
- 문제는 굉장히 심플하며 풀이를 향한 길 또한 그리 다양하지 않아 보인다.
- 해시 : 데이터를 다루는 기법 중 하나로, 검색과 저장을 아주 빠르게 진행함(대표적으로 Map 객체) + 데이터를 저장할 때 key-value형태로 데이터가 존재하고, key값이 배열의 인덱스로 저장되기 때문에 검색과 저장이 빠르게 일어남
JS CODE (1)
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';
}
- map 객체를 이용해 데이터 수집이 빠르게 진행되도록 함
- 8,9 번째 줄이 인상 깊음. 눈에 익혀놓자
JS CODE (2)
function solution(participant, completion) {
var dic = completion.reduce((obj, t)=> (obj[t]= obj[t] ? obj[t]+1 : 1 , obj) ,{});
return participant.find(t=> {
if(dic[t])
dic[t] = dic[t]-1;
else
return true;
});
}
- 이 풀이가 할 얘기가 좀 있을 것 같다.
1. 쉼표 연산자
- 정의 : 각각의 피연산자를 왼쪽에서 오른쪽으로 평가하고 마지막 연산자의 값을 반환함
- 위와 같은 형태로 쓰였을 경우 앞의 삼항연산자로 연산한 후, 반환값은 obj를 지정하는 코드이다. 즉, acc에 obj가 넘겨지도록 return 없이 쉼표연산자를 사용한 것.
- 일례로, return (x += 1, x); 는 ++x와 같은 효과를 갖는다.
2. Array.prototype.find(판별함수)
- forEach 와 같은 순회하는 함수. filter 메서드와 유사한 것 같은데, 차이점은 최초로 true 값을 보인 값을 반환한다는 것.
'알고리즘 > 해시' 카테고리의 다른 글
[JavaScript] Programmers 베스트 앨범 (0) | 2022.05.03 |
---|---|
[JavaScript] Programmers 위장 (0) | 2022.05.03 |