# 나의 풀이
function solution(participant, completion) {
let answer;
let mapList = new Map();
for (let item of participant){
if(mapList.has(item)){
mapList.set(item, mapList.get(item) + 1)
}
else{
mapList.set(item, 1)
}
}
for(let item of completion){
if(mapList.get(item) === 1){
mapList.delete(item)
} else{
mapList.set(item, mapList.get(item) - 1)
}
}
for(let [key, val] of mapList){
answer = key
}
return answer
}
# 다른 풀이
function solution(participant, completion) {
let answer;
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) answer = k;
}
return answer;
}
......?
var solution=(_,$)=>_.find(_=>!$[_]--,$.map(_=>$[_]=($[_]|0)+1))
이번 문제를 통해 해시라는 자료구조를 처음 공부했다.
아직 정확하게 알고 있지는 않지만, 해시의 핵심 내용은 key-value쌍으로 이루어진 자료구조로
해시를 이용하면 순회하며 탐색하는 방법 대신 key값에 접근하여 O(1)의 시간 복잡도를 가질 수 있다.
이번 문제에서는 javascript의 Map을 사용하여 key값은 배열의 elements를 사용하였고 기본적으로 구현되어 있는 has, get, set, delete 메서드를 사용하였다.
다른 풀이를 보니 너무 절차적으로 코드를 작성해서 for문을 불필요하게 한번 더 사용하게 되었다.
항상 깔끔한 코드를 작성하도록 주의하고, 해시 테이블의 구조와 메서드를 한번 직접 구현해 보아야겠다.
'코딩테스트 > Javascript' 카테고리의 다른 글
위장 (0) | 2022.01.26 |
---|---|
콜라츠 추측 (0) | 2021.06.25 |
프로그래머스 스킬체크 레벨 1 (0) | 2021.05.13 |
최대공약수와 최소공배수 (0) | 2021.03.08 |
정수 내림차순으로 배치하기 (0) | 2021.01.31 |