[Programmers] 완주하지 못한 선수

Jinny·2025년 1월 17일
0
  • 날짜 / 주차-누적 횟수: 2025.01.16(목) / 3주차-1회
  • 사이트 이름: 프로그래머스
  • 사용 언어: 자바스크립트
  • 문제 고유 번호 및 레벨: 42579 / Lev 1
  • 최적 풀이 방법:
    function solution(participant, completion) {
        // 1. 해시 테이블 생성
        const obj = {};
        
       // 2. 참가자들의 이름을 해시 테이블에 추가
        for (const p of participant) {
            if(obj[p]) {
                obj[p] += 1;
            } else {
                obj[p] = 1;
            }
        }
        
        // 3. 완주한 선수들의 이름을 키로 하는 값을 1씩 감소
        for (const c of completion) {
            obj[c] -= 1;
        }
        
        // 4. 해시 테이블에 남아 있는 선수가 완주하지 못한 선수
        for (const key in obj) {
            if (obj[key] > 0) {
                return key;
            }
        }
    }
    1. 해시 테이블을 생성한다.
      • 빈 객체를 만든다. 이후에 이 객체 안에 요소들을 넣을 예정이다.
    2. 모든 참가자들의 이름을 해시 테이블에 추가한다.
      participant를 순회하며 참가자 이름을 오브젝트에 추가한다.
      처음 등장하는 이름은 1, 그렇지 않은 경우는 기존 이름 개수를 +1 한다.
      - for of 반복문으로 participant 배열 (참가자 배열)의 각 요소별로 접근한다.
      - 객체에 obj[p]로 예를 들어 obj[leo]가 true면 obj[leo]에 1을 더한다.
      - false면 1을 넣는다.
    3. 완주한 선수들의 이름을 키로 하는 값을 1씩 감소한다.
      obj의 키를 completion에서 찾으면 이름 개수를 -1 한다.
      - for of 반복문으로 competion 배열을 돌며 요소에 하나씩 접근한다.
      - obj[마라토너 이름]을 1씩 감소한다.
    4. 해시 테이블에 남아있는 선수가 완주하지 못한 선수이다.
      순회가 끝난 후 obj에서 값이 0보다 큰 키를 반환한다. 완주를 못한 선수는 단 1명이라고 했으므로 찾는 즉시 해당 값을 반환하며 반복문을 종료 한다.
  • 배운 개념:
    • 객체를 생성한 다음에 객체[p] p안에 값을 넣고 숫자를 넣으면 그 숫자가 키 값이 된다.
    • 해시를 이용해서 코딩테스트를 풀면 효율적인 계산이 가능하다.
profile
세상을 이롭게 하는 프론트엔드 개발자 Jinny

0개의 댓글

관련 채용 정보