[프로그래머스] 귤 고르기 - JavaScript

최은우·2023년 7월 26일
0

Algorithms

목록 보기
6/14
function solution(k, tangerine) {
  const cntArr = Array(Math.max(...tangerine) + 1).fill(0);
  for (let i = 0; i < tangerine.length; i++) {
    cntArr[tangerine[i]]++;
  };

  cntArr.sort((a, b) => b - a);

  let idx = 0;
  while (k > 0) {
    if (cntArr[idx] === 0) {
      idx++;
    };
    cntArr[idx]--;
    k--;
  }
  
  return idx + 1
}

풀이 방향

  • 가장 갯수가 많은 종류 부터 골라야 가장 적은 종류로만 선정할 수 있습니다.
  • 따라서 먼저 tangerine 리스트를 갯수를 기준으로 파악해야 합니다.
  • tangerine 리스트 자체를 정렬할 수도 있지만 갯수를 기준으로 sorting하는 것은 코드가 길 뿐만 아니라 시간도 오래 걸릴 수 있습니다.
  • 따라서 각 숫자 별로 갯수 정보를 담고 있는 cntArr를 만듭니다.

  1. 먼저 cntArr를 만듭니다
    예를 들어 제일 큰 숫자가 5이면 길이가 6인 Array를 생성해줍니다.

  2. cntArr를 거꾸로 정렬해줍니다.

    굳이 어떤 숫자가 몇 개 였는지를 기억할 필요가 없습니다. 그저 몇 개가 있었는지만 알아낸 뒤 큰 숫자부터 줄여나가면 되기 때문입니다.

  3. cntArr의 젤 첫번째 원소부터 0이 아니라면 1씩 줄여줍니다. 0이 되면 인덱스를 1씩 키워갑니다.

2개의 댓글

comment-user-thumbnail
2023년 7월 26일

글 잘 봤습니다.

1개의 답글
Powered by GraphCDN, the GraphQL CDN