본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Programmers] level 1: 완주하지 못한 선수 by JavaScript

by codingBear 2022. 7. 4.
728x90
반응형

 이번 글은 아래 링크의 글들을 참조하여 작성하였습니다.

 

[JS/알고리즘] 해시 : 완주하지 못한 선수 (프로그래머스)

완주하지 못한 선수 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴

muhly.tistory.com

 

[프로그래머스] 완주하지 못한 선수 (JavaScript 풀이)

완주하지 못한 선수 👚 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이

yzink.tistory.com

 

9ummy (구미) - velog

 

velog.io


 이번 문제에 대한 자세한 사항은 다음 링크를 참조하길 바랍니다.

 

 문제를 어찌어찌 풀기는 했으나 효율성 테스트에서 광탈했다. 문제 풀어내기도 급급한데 아직은 시간 복잡도까지 고려하면서 코드를 짜기엔 실력이 부족하다. 다른 사람들이 짜놓은 코드를 보면서 더욱 연구해보아야겠다!

 그리고 문제를 꼼꼼히 읽지 않아서 단 한 명만 제외된다는 조건을 간과하다보니 문제를 푸는 데 시간이 더 걸렸다. 다음부터는 제약조건 및 문제 요구사항을 차근차근 따져가며 문제를 풀어야겠다고 반성했다.

 

Solutions

Solution 1. * 효율성 테스트 탈락
/* My Solution*/
function solution(participant, completion) {
  let answer = '';
  for (let i = 0; i < participant.length; i++) {
    for (let j = 0; j < completion.length; j++) {
      if (participant[i] === completion[j]) {
        participant[i] = '';
        completion[j] = '';
      }
    }
  }
  for (const val of participant) {
    if (val !== '') answer = val;
  }
  return answer;
}
Solution 2.
/* Sort Ver.*/
function solution(participant, completion) {
  participant.sort();
  completion.sort();
  return participant.find((el, i) => el !== completion[i])
  //for (let i = 0; i < participant.length; i++) {
  //  if (participant[i] !== completion[i]) return participant[i];
  //}
}
Solution 3.
  /* Reduce Ver. */
function solution(participant, completion) {
  const dic = completion.reduce((obj, key) => {
    obj[key] = obj[key] ? obj[key] + 1 : 1;
    return obj;
  }, {});
  // const dic = completion.reduce(
  //   (obj, key) => ((obj[key] = obj[key] ? obj[key] + 1 : 1), obj),
  //   {}
  // );
  return participant.find((key) => {
    if (dic[key]) dic[key] -= 1;
    else return true;
  });
}
Solution 4.
/* Obj Ver. */
function solution(participant, completion) {
  const obj = {};
  for (const p of participant) {
    obj[p] = obj[p] ? obj[p] + 1 : 1;
  }
  for (const c of completion) {
    obj[c] -= 1;
  }
  for (const key in obj) {
    if (obj[key] !== 0) return key;
  }
}

/* Map Ver. */
function solution(participant, completion) {
  const map = new Map();
  for (const p of participant) {
    if (!map.get(p)) map.set(p, 1);
    else map.set(p, map.get(p) + 1);
  }
  for (const c of completion) {
    if (map.get(c)) map.set(c, map.get(c) - 1);
  }
  for (const p of participant) {
    if (map.get(p) !== 0) return p;
  }
  // const map = new Map();
  // for (let i = 0; i < participant.length; i++) {
  //   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;
  // }
}
728x90
반응형

댓글