일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- JavaScript
- 화장품
- 프로그래밍언어
- 알고리즘트레이닝
- 자바스크립트
- 지혜를가진흑곰
- 채권
- algorithmtraining
- 프로그래머스 알고리즘 공부
- C++
- 주식
- Java
- 서평
- 재테크
- 경제
- 독서
- 백준알고리즘
- algorithmStudy
- 돈
- 책알남
- C
- 독후감
- algorithmTest
- 책을알려주는남자
- 자바
- 알고리즘 공부
- 알고리즘공부
- 성분
- 투자
- 다독
- Today
- Total
탁월함은 어떻게 나오는가?
[Algorithm] 귤 고르기 (Programmers - JavaScript) 본문
[Algorithm] 귤 고르기 (Programmers - JavaScript)
Snow-ball 2023. 12. 7. 21:15문제 설명
경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.
예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류의 최소일 때입니다.
경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine 이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요.
풀이:
귤고르기 문제에서는 최소한의 종류로 원하는 박스를 채우는게 목표인 문제이다. 그렇다면 생각해볼 수 있는것은 2가지이다.
첫째. tangerine 배열값에 n개 이상의 종류의 과일을 정리해서 key, value 형태로 정리가 필요하다.
ex) 1번 크기 과일, 총수량 1개 / 2번 크기 과일, 총수량 2개
이런식의 정리가 필요하다.
둘째. 정리가 된 테이블을 기준으로 많은 수량부터 채워나가면 된다.
ex) 2번 크기 과일 2개, 3번 크기 과일 2개, 4번 크기 과일 2개 라고한다면 > 2,3번 / 3,4번 / 2,4번 어떤것이 순서가 되도 상관은 없다.
정리하자면, 과일들을 테이블을 사용해서 정리하고 정렬 후 많은 숫자의 과일부터 담아주는 방식을 채택했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
function solution(k, tangerine) {
let answer = 0;
const map = {};
for (let i = 0; i < tangerine.length; ++i)
map[tangerine[i]] = (map[tangerine[i]] || 0) + 1;
const sortable = [];
for (let name in map) {
sortable.push([name, map[name]]);
}
const sortMap = sortable.sort((a, b) => b[1] - a[1]).map((el) => el[1]);
for (let i = 0; i < sortMap.length; ++i) {
if (k <= 0) break;
k -= sortMap[i];
answer++;
}
return answer;
}
|
cs |
https://school.programmers.co.kr/learn/courses/30/lessons/138476
'[Snow-ball]프로그래밍(컴퓨터) > Algorithm Training' 카테고리의 다른 글
[Algorithm] 두 큐 합 같게 만들기 (Programmers - JavaScript) (0) | 2023.12.11 |
---|---|
[Algorithm] 숫자 카드 나누기 (Programmers - JavaScript) (0) | 2023.12.08 |
[Algorithm] 할인 행사 (Programmers - JavaScript) (1) | 2023.12.01 |
[Algorithm] 마법의 엘리베이터 ( Programmers - JavaScript ) (0) | 2023.11.08 |
[Algorithm] 호텔 대실 ( Programmers - JavaScript ) (0) | 2023.10.22 |