[Lv.1] 완주하지 못한 선수 - 질문
문제 : https://programmers.co.kr/learn/courses/30/lessons/42576
🔶 나의 풀이
1. 두 배열을 sort로 정렬함
2. 두 배열의 각 요소를 인덱스로 접근해서 같은지 파악
3. 다르면 그 값을 리턴한다.
// 방법1 - sort,for문 사용
function solution(participant, completion) {
participant.sort();
completion.sort();
for (let i = 0; i < participant.length; i += 1) {
if (participant[i] !== completion[i]) {
return participant[i];
}
}
}
// 방법2- sort,find사용
function solution(participant, completion) {
participant.sort(); // ["ana", "mislav", "mislav", "stanko"]
completion.sort(); // ["ana", "mislav", "stanko"]
return participant.find((el, idx) => el !== completion[idx]);
}
// 실행
console.log(solution(['leo', 'kiki', 'eden'], ['eden', 'kiki'])); // "leo"
console.log(
solution(
['marina', 'josipa', 'nikola', 'vinko', 'filipa'],
['josipa', 'filipa', 'marina', 'nikola'],
),); // "vinko"
console.log(
solution(['mislav', 'stanko', 'mislav', 'ana'], ['stanko', 'ana', 'mislav']),
); // "mislav"
🔶 다른 사람 풀이
- 방법1. Map 사용, 객체의 키값은 중복되지 않는 속성 이용
function solution(participant, completion) {
const map = new Map();
for (let i = 0; i < participant.length; i += 1) {
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';
}
- 방법2. reduce,find 이용
function solution(participant, completion) {
const dic = completion.reduce((acc, cur) => {
acc[cur] = acc[cur] ? acc[cur] + 1 : 1;
return acc;
}, {});
// console.log(dic); // {eden: 1, kiki: 1} , {josipa: 1, filipa: 1, marina: 1, nikola: 1}
return participant.find((el) => {
if (dic[el]) {
dic[el] -= 1;
} else {
return el;
}
});
}
🔶피드백
Author And Source
이 문제에 관하여([Lv.1] 완주하지 못한 선수 - 질문), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jhplus13/Lv.1-완주하지-못한-선수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)