# 나의 풀이 

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

+ Recent posts