문제 설명
수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
function solution(participant, completion) {
var answer = '';
const hash_table = participant.reduce(function (count_participant,people) {
if (people in count_participant) {
count_participant[people]++;
} else {
count_participant[people]=1
}
return count_participant
},{});
completion.forEach((c,idx)=>hash_table[c]--);
for (const [key,val] of Object.entries(hash_table)) {
if (val>0) {return key}
}
}
reduce
를 활용하여 array 데이터를 object로 나타내었다. reduce
를 통해 반환받은 object는 iterable 하지 않기 때문에 Object.entries(hash_table)
을 통해 key-value를 나타내주는 iterable한 형태로 바꿔주었다.forEach
와 for of
에서 2번의 반복이 일어나기 때문에 find
를 활용하는 방법을 생각했다.function solution(participant, completion) {
const hash_table = participant.reduce((count_participant,people) => {
if (people in count_participant) {
count_participant[people]++;
} else {
count_participant[people]=1
}
return count_participant
},{});
completion.forEach((c,idx)=> hash_table[c]--);
const answer = Object.entries(hash_table).find(c => c[1]>0);
return answer[0];
}
find
를 활용하여 조건에 맞고하는 첫번째 요소를 return하게 해주었다.+) 여기서 다른 풀이는 participatn와 completion 모두 hash table로 만든뒤 value값이 다른 사람을 찾는 방법도 존재한다.