seunghyun Note

[프로그래머스] 완주하지 못한 선수 (해시) with JS 본문

코딩테스트/프로그래머스

[프로그래머스] 완주하지 못한 선수 (해시) with JS

승숭슝현 2024. 1. 16. 14:17

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/42576

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이

 

오늘은 하루종일 해시를 공부하기 위해 해시 관련 문제 위주로 풀었다. 

해시는 저장 또는 검색 등에서 자주 활용되는 자료구조이다. 정확하게는 특정한 함수(알고리즘)를 통해서 값을 추출하고 활용하는 것

함수(알고리즘)를 어떻게 구현하는지에 따라 사용 용도와 성능이 달라진다.

이러한 해시는 더 나아가서 암호, 블록체인, 메시지 인증 코드 등에서도 활용된다.

해시 알고리즘 설명 5분만에 이해하기 참고

해시를 이해하기 위해서는 아래 영상을 참고하자

⬇  ⬇  ⬇

5분이면 해시 완전 이해!

https://www.youtube.com/watch?v=zFL29ydL9D8

1. 해시를 선언해준다. dic = {}

2. 배열을 순회시켜 값이 있으면 1씩 증가, 없으면 추가

3. 순회된 배열을 저장한 dic 해시를  비교할 completion 배열을 또 순회시켜 값이 있을경우 -1을 한다.

4. 마지막으로 값이 0보다 클 경우에는 값(중복을 해도 사라지지 않은 값들)을 반환한다.

function solution(participant, completion) {
  let dic = {};

  participant.forEach((element) => {
    dic[element] = (dic[element] || 0) + 1;
  });

  completion.forEach((element) => {
    if (dic[element]) {
      dic[element] -= 1;
    }
  });

  for (let key of Object.keys(dic)) {
    if (dic[key] > 0) {
      return key;
    }
  }
}

 

728x90