javascript/프로그래머스
[코딩테스트 연습]level 1. 완주하지 못한 선수
sewonzzang123
2022. 7. 4. 18:59
반응형
문제
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
제한사항
- 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
- completion의 길이는 participant의 길이보다 1 작습니다.
- 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
- 참가자 중에는 동명이인이 있을 수 있습니다.
원래는 findIndex 후 splice를 사용해서 동작시키려고 하였다.
결과값은 잘 나왔지만, 유효성에서 자꾸 탈락되는 경우가 있어서 다른 방법으로 정렬 후 완주한 선수들을 조회하며 같은 번째의 배열에 있지 않다면 참여한 전체 선수의 해당 번째 사람이 완주하지 못한 선수이고, 모두 통과했을 경우에는 마지막 선수가 완주하지 못한 선수가 된다.
function solution(participant, completion) {
participant = participant.sort();
completion = 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) {
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';
}
반응형