한 걸음씩
[프로그래머스][JS] 귤 고르기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/138476
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(k, tangerine) {
let obj = {}
for (let i = 0; i < tangerine.length; i++){
if (obj[tangerine[i]]){
obj[tangerine[i]]++
}else{
obj[tangerine[i]] = 1
}
}
// 크기가 서로 다른 종류의 수(obj)인 귤을 최소화하려면 내림차순으로 정렬(values)하여
// 배열(values)에서 하나씩 꺼내어 더한 값(sum)이 k보다 크면 누적 더하기를 종료
// 배열(values)에서 하나씩 꺼내어 더할때마다 카운트 횟수(cnt)를 체크하여 반환
// value값만 배열로 만들어서 내림차순으로 정렬
const values = Object.values(obj).sort((a, b) => b - a)
let sum = 0
let cnt = 0
while(true){
if (k <= sum){
break
}else{
sum += values[cnt]
cnt++
}
}
return cnt;
}
리뷰
주어진 tangerine 배열을 객체로 만드는 것까지는 생각했는데
서로 다른 종류의 수를 어떻게 최소화할지에 대해서는 힌트가 필요했다.
객체의 value값을 내림차순으로 정렬하여 하나씩 누적 합을 하면 서로 다른 종류의 수를 최소화할 수 있다.
그리고 위의 과정을 수행할 때 누적 합을 할 때 k를 초과하지 않으면 된다.
배열에서 수를 하나씩 꺼내어 더할 때마다 횟수를 기록했다가 그 횟수를 리턴하면 된다.
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] H-Index ✅ (0) | 2023.08.16 |
---|---|
[프로그래머스][JS] 의상 (0) | 2023.08.15 |
[프로그래머스][JS] 최고의 집합 ✅ (0) | 2023.08.12 |
[프로그래머스][JS] 튜플 (0) | 2023.08.11 |
[프로그래머스][JS] 전화번호 목록 (0) | 2023.08.10 |