수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
participant | completion | return |
---|---|---|
["leo", "kiki", "eden"] | ["eden", "kiki"] | "leo" |
["marina", "josipa", "nikola", "vinko", "filipa"] | ["josipa", "filipa", "marina", "nikola"] | "vinko" |
["mislav", "stanko", "mislav", "ana"] | ["stanko", "ana", "mislav"] | "mislav" |
completion
배열을 Array.prototype.forEach()
로 순회하며 해당 사람을 Array.prototype.indexOf()
를 이용해 찾아내서 Array.prototype.splice()
를 사용하여 participant
배열에서 지워준다.participant
배열에서 남은 한 명이 결국 답이 된다.function solution(participant, completion) {
completion.forEach(name => {
if(participant.indexOf(name) !== -1)
participant.splice(participant.indexOf(name), 1);
})
return participant[0];
}
Map
을 사용한다.Map.prototype.get()
메소드는 파라미터로 주어진 키에 해당하는 값을 반환하거나 값이 없다면 undefined
을 반환한다는 점을 이용한다.for...of
문과 디스트럭쳐링 문법을 활용해 Map
의 (key, value)쌍을 순회한다.function solution(participant, completion) {
var answer = '';
let map = new Map();
for(let i=0; i<participant.length; i++) {
let p = participant[i],
c = completion[i];
map.set(p, (map.get(p) || 0) + 1);
map.set(c, (map.get(c) || 0) - 1);
}
for(let [k, v] of map) {
if(v > 0) answer = k;
}
// map.forEach((k, v) => {
// if(v > 0) answer = k;
// });
return answer;
}
프로그래머스 고득점 Kit - 해시
혹시 저기 주석에 있는 코드가 프로그래머스에서는 왜 제대로 작동하지 않는지 아시는 분 계실까요? 브라우저 콘솔창에서는 아무 문제 없는 것 같습니다.