[프로그래머스 lev1/JS] 완주하지 못한 선수

woolee의 기록보관소·2022년 11월 8일
0

알고리즘 문제풀이

목록 보기
68/178

문제 출처

프로그래머스 lev1 - 완주하지 못한 선수

문제

나의 풀이

function solution(participant, completion) {
  let pt = {};
  for (let i=0; i<participant.length; i++) {
    if (pt[participant[i]]) pt[participant[i]]++;
    else pt[participant[i]]=1;
  }
  
  for (let i=0; i<completion.length; i++) {
    if (pt[completion[i]]) pt[completion[i]]--;
  }
  
  let ans = Object.entries(pt);
  let answer='';
  for (let i=0; i<ans.length; i++) {
    if (ans[i][1]===1) {
      answer=ans[i][0];
    }
  }
  return answer;
}

console.log(solution(["leo", "kiki", "eden"], ["eden", "kiki"]));

다른 풀이

for ... in

function solution(participant, completion) {

  participant.sort();
  completion.sort();

  for(let i in participant) {
      if(participant[i] !== completion[i]) return participant[i];
  }
}

sort보다 성능도 좋고, 가독성도 좋다.

요소 추가: Map.set(key, value)
요소 접근: Map. get(key)

function solution(participant, completion) {
  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;
  }

  return 'nothing';
}

간단해서 좋다.

const solution = (p, c) => {
    p.sort()
    c.sort()
    while (p.length) {
        let pp = p.pop()
        if (pp !== c.pop()) return pp
    }
}
profile
https://medium.com/@wooleejaan

0개의 댓글