프로그래머스 - 완주하지 못한 선수 (JavaScript)

99club

문제

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)}