프로그래머스 1단계 - 완주하지 못한 선수 (해시)

원동휘·2022년 10월 16일
0

프로그래머스

목록 보기
38/46

< 문제 >

해시 풀이
먼저 문제 카테고리가 해시로 되어있어서 - 해시맵 알고리즘으로 접근
빅오 표기법의 O(n)으로 검색할 수 있다.
먼저 pH 라는 participation Map을 만들고, participation의 길이만큼 반복하면서 pH Map에 값을 세팅해줍니다.
그리고 completion만큼 반복을 돌면서 pH map과 비교해서 값이 있으면 pH map의 해당 key의 value를 제거해주고, 제거했을때 value가 0이라면 해당 key자체를 삭제해줍니다.
그렇게 되면 최종적으로 pH를 확인했을때 하나의 key,value만 남아있게 되고 그값을 for of로 key,value로 꺼내서 key를 answer에 대입해주는 풀이.

< 해시 풀이 >

function solution(participant, completion) {
  let answer = '';

  const pH = new Map();

  participant.forEach(item => {
    if (pH.has(item)) {
      pH.set(item, pH.get(item) + 1);
    } else {
      pH.set(item, 1);
    }
  });

  completion.forEach(item => {
    if (pH.has(item)) {
      pH.set(item, pH.get(item) - 1);
      if (pH.get(item) === 0) pH.delete(item);
    }
  });

  for (const [key, value] of pH) {
    answer = key;
  }

  return answer;
}

console.log(solution(['leo', 'kiki', 'eden'], ['eden', 'kiki']));
console.log(solution(['mislav', 'stanko', 'mislav', 'ana'], ['stanko', 'ana', 'mislav']));

< sort 풀이 >

function solution(participant, completion) {
  participant.sort();
  completion.sort();
  console.log(participant);
  console.log(completion);

  for (let i = 0; i < participant.length; i++) {
    if (participant[i] !== completion[i]) {
      return participant[i];
    }
  }
}

console.log(solution(['mislav', 'stanko', 'mislav', 'ana'], ['stanko', 'ana', 'mislav']));
profile
Front-End Developer #Nextjs #React #Typescript

0개의 댓글