자바스크립트 코딩테스트

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

준벨롭 2023. 11. 25. 12:28

문제

답안

function solution(participant, completion) {
    var answer = '';
    
    //participant, completion 배열을 정렬한다.
    participant.sort();
    completion.sort();
    
    // participant와 completion의 i번째 값이 다를 때 반복문에서 탈출하고, participant의 i값을 출력
    for(let i = 0; i < participant.length; i++){
        if(participant[i] !== completion[i]){
        answer = i;
            break;
        }
    }

    return participant[answer];   
}

이 문제는 사실 해시로 구분돼 있지만, 내 머릿속에 생각난 풀이는 이거였다,,,,

function solution(participant, completion) {
    // 객체 생성
    const map = new Map();

    for(let i = 0; i < participant.length; i++) {
        let a = participant[i], 
            b = completion[i];
        
        // 참가자와 완주자를 각각 key를 이용해 map에 저장한다.
        // 만약 해당 key가 맵에 없다면 0으로 초기화한 후 1을 더한다. (참가자)
        // 만약 해당 key가 맵에 이미 있다면 1을 빼준다. (완주자)
        map.set(a, (map.get(a) || 0) + 1);
        map.set(b, (map.get(b) || 0) - 1);
    }
    
    //k, v가 있는 map에서 v값이 0보다 클 경우의 k값을 리턴한다.(참가했지만 완주하지 못한 선수)
    for(let [k, v] of map) {
        if(v > 0) return k;
    }

}

다른사람의 풀이를 보고 이해해봤다.

후기

map생성과 map.get메서드와 논리연산자 || 를 이용해 value값을 다루는게 인상깊었다.

객체 더 열심히 익히기....

 

 

728x90