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

@bbearcookie · April 03, 2023 · 1 min read

문제

https://school.programmers.co.kr/learn/courses/30/lessons/138476

아이디어

  1. 전체 귤을 순회하면서, 각 크기의 귤이 몇 개씩 있는지를 확인한다.
  2. 같은 종류의 귤이 많을수록 앞쪽에 배치하는 rank 배열을 만든다.
  3. rank 배열을 순회하면서 귤을 더 이상 담을 수 없을 때까지 담으면서 결과를 카운트한다.

소스코드

function solution(k, tangerine) {
  var answer = 0

  // 1. 전체를 순회하면서, 각 숫자의 갯수를 카운트한다.
  const count = {}
  tangerine.forEach(t => {
    if (count[t]) count[t] += 1
    else count[t] = 1
  })

  // 2. 기록한 카운트 객체를 가지고, 같은 종류가 많을수록 앞서는 rank 배열을 만든다.
  const rank = Object.entries(count)
  rank.sort((a, b) => b[1] - a[1])

  // 3. rank 배열을 순회하면서 귤을 더 이상 담을 수 없을 때까지 담으면서 결과를 카운트한다.
  for (let i = 0; i < rank.length; i++) {
    const [size, num] = rank[i]
    answer++
    k -= num
    if (k <= 0) break
  }

  return answer
}
@bbearcookie
Frontend Developer