이건 그냥 프로그래밍에서 Dictionary를 사용할 수 있는지 테스트하는 문제 같음.
function solution(participant, completion) {
let counter = {};
// 참가자들 counter에 넣고 completion을 이용해 숫자 빼기
// 동명이인 처리를 위해서... -> 아니면 filter 함수가 효율적
for(let i=0; i<participant.length; i++) {
// 카운터에 없다면
if(counter[participant[i]] === undefined) {
// 1 넣어주기
counter[participant[i]] = 1;
}
// 카운터에 있다면
else {
// 1 더해주기
counter[participant[i]] += 1;
}
}
for(let i=0; i<completion.length; i++) {
// 완주자는 참가자의 부분집합이므로 존재하는지 검증 필요없음
counter[completion[i]] -= 1;
}
// 필터로 정답자 걸러내기 -> 1인 요소만
return Object.keys(counter).filter((ele) => counter[ele] === 1)[0];;
}
map과 3항연산자 이용해 짧게 풀면 아래와 같다.
function solution(participant, completion) {
let counter = {};
participant.map((p) => {counter[p] = counter[p] ? counter[p]+1 : 1});
completion.map((c) => {counter[c] = counter[c]-1});
// 필터로 정답자 걸러내기 -> 1인 요소만
return Object.keys(counter).filter((ele) => counter[ele] === 1)[0];;
}