수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
🚫제한 사항
마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
completion의 길이는 participant의 길이보다 1 작습니다.
참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
참가자 중에는 동명이인이 있을 수 있습니다.
❗입출력 예
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" |
😀 내가 푼 답
participant, completion 배열을 오름차순으로 정렬
completion 배열의 길이만큼 반복하면서 participant, completion 배열의 동일한 인덱스에 있는 요소들을 비교
비교한 요소가 다르다면, 해당 참가자는 완주하지 못한 선수이므로 그 이름을 리턴하고 모든 비교가 끝났는데도 완주하지 못한 선수가 없다면, 마지막으로 남은 참가자가 완주하지 못한 선수이므로 그 이름을 리턴
function solution(participant, completion) {
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];
}
😊 문제풀이 답안 OR 다른사람들 답안
// 1
function solution(participant, completion) {
var dic = completion.reduce((obj, t)=> (obj[t]= obj[t] ? obj[t]+1 : 1 , obj) ,{});
return participant.find(t=> {
if(dic[t])
dic[t] = dic[t]-1;
else
return true;
});
}
// 2
function solution(participant, completion) {
let obj = new Object();
let answer = '';
for (name of completion){
if( obj[name] == undefined){
obj[name] = 1;
} else {
obj[name]++;
}
}
// 3
for(name of participant){
if(obj[name]==0 || obj[name]==undefined){
answer = name;
break;
} else {
obj[name]--;
}
}
return answer;
}
- find()
- 주어진 함수의 조건을 만족하는 첫번째 요소값을 반환함
- 조건에 맞는 요소가 없다면 undefined를 반환함
참고
'공부 > 코딩테스트' 카테고리의 다른 글
Q. 자릿수 더하기 (0) | 2023.06.19 |
---|---|
Q. 이상한 문자 만들기 (0) | 2023.06.19 |
Q. 수박수박수박수박수박수? (0) | 2023.06.19 |
Q. 서울에서 김서방 찾기 (1) | 2023.06.19 |
Q. 문자열 다루기 기본 (0) | 2023.06.17 |