완주하지 못한 선수

https://programmers.co.kr/learn/courses/30/lessons/42576#

 

코딩테스트 연습 - 완주하지 못한 선수

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수��

programmers.co.kr

hash map을 쓰거나 Set을 쓰거나 해서 처리 가능하다.

function solution(participant, completion) {
    var answer = '';
    let map = new Map();
    
    for(let i = 0; i < participant.length; i++){
        map.set(participant[i], ~~map.get(participant[i]) + 1);    
    }
    
    for(let i = 0; i < completion.length; i++){
        map.set(completion[i], ~~map.get(completion[i]) - 1);    
    }    
    
    for(let [key,value] of map.entries()){
        if(value == 1) return key;
    }
    
    return "";
}

 

Array sorting 을 통해서 해당 문제를 처리 할 수도 있다

function solution(participant, completion) {
    var answer = '';
    
    participant.sort();
    completion.sort();

    for(let i = 0; i < completion.length; i++){
        if(participant[i] != completion[i]) return participant[i];
    }
    
    return participant[participant.length-1];
    
}

이걸 다르게 표현하면

function solution(participant, completion) {
    var answer = '';
    
    participant.sort((a,b)=> {
        if(a > b) return 1;
        if(a < b) return -1;
        return 0;
    });
    completion.sort((a,b)=> {
        if(a > b) return 1;
        if(a < b) return -1;
        return 0;
    });

    for(let i = 0; i < completion.length; i++){
        if(participant[i] != completion[i]) return participant[i];
    }
    
    return participant[participant.length-1];
    
}

이렇게도 된다. 

이전에는 

sort.((a,b)=>a<b); 

이 코드도 아파벳 sort로 먹었는데, 이제 더이상 안된다.

Chrome 70 and Node.js 11 에서는 boolean 처리를 지원하지 않는다.

728x90
반응형