코딩테스트

[코테] 프로그래머스 해시 알고리즘 - 완주하지 못한 선수 (문제풀이)

인어공쭈 2024. 4. 24. 14:44
문제설명)
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

 

 

문제는 이런식이여서 처음엔 간단하게 풀어봤다.

문제풀이)
각각의 어레이를 정렬해서 비교
길이를 맞추기 위해 completion에는 빈값 추가
function solution(participant, completion) {
    var answer = '';
    completion[completion.length] = '';
    var arr1 = participant.sort();
    var arr2 = completion.sort();
   
    for(let i=0; i<arr1.length; i++){
        if(arr1[i] !== arr2[i]){
             answer = arr1[i];
        }

    }
    return answer
}

 

 

하지만 이렇게 하니깐 해시로 푼거 같지도 않고 성능이 떨어져 보여서 다른 방식을 좀 더 찾아봤다.

문제풀이)
어레이 값을 비교할 맵을 생성
길이가 +1 더 긴 pa~어레이를 포문을 돌린다
a 에서 존재하지않으면 0 +1 => 1 , 존재하면 1 반환 + 1 이런식으로 0이상의 값을 추출한다
맵을 포문을 돌려서 0이상인 값을 리턴함
function solution(participant, completion) {
    const map = new Map();

    for(let i = 0; i < participant.length; i++) {
        let a = participant[i];
        let 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;
    }

}

 

map.set 을 사용해서 작성해보았다. 해시랑 훨씬 알맞는 느낌? 좋은듯

map.set(key, value) 메소드는 주어진 키-값 쌍을 Map에 추가하거나 업데이트할 수 있다.

반응형