[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;
    }
  });
}

🔶피드백

좋은 웹페이지 즐겨찾기