일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BFS
- 프로그래머스
- kotlin
- 코틀린
- 파이썬
- 문제풀이
- 코딩봉사
- programmers
- CJ UNIT
- 1과목
- 자바
- java
- 회고
- 정보처리산업기사
- SW봉사
- 알고리즘
- 소프티어
- 시나공
- python
- MYSQL
- 공부일지
- SQL
- softeer
- C++
- 스프링
- 백준
- 코딩교육봉사
- 데이터베이스
- 백준 알고리즘
- 백준알고리즘
Archives
- Today
- Total
JIE0025
[그리디][lv.2] 귤 고르기 (Java) 본문
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/138476
✅ 문제
🔑 Key Point
귤 크기별로 분류했을 떄
서로 다른 종류의 수를 최소화하고 싶다
문제 이해를 위해 예제를 봐보자.
K개의 귤을 담아야하는데,
귤 리스트에 1, 3, 2, 5, 4, 5, 2, 3 사이즈의 귤들이 존재한다.
이때 1 (1개), 2 (2개), 3 (2개), 4 (1개), 5(2개)가 존재함을 볼 수 있다.
총 6개를 담는 귤박스를 만든다 했을때 2, 3, 5를 넣으면 서로다른 종류의 수가 최소화된다
즉 귤의 개수로 내림차순 정렬해서,
귤 개수가 많은 순서대로 귤 박스에 넣어주면, 최소값을 찾을 수 있다!
✅ 시간복잡도 고려하기
귤의 개수는 간단하게 HashMap을 이용해서 세어주면 된다.
> 귤 전체 리스트의 최대값이 1000만이기 때문에 HashMap은 put/get이 O(1)이라서 합리적이다.
>>> 전체 귤 리스트를 한번씩 확인해서 다 처리해줘야하므로 O(N)
✍️ HashMap - Value기준 정렬
//value (개수) 기준 내림차순 정렬
List<Map.Entry<Integer,Integer>> list = new ArrayList<>(count.entrySet());
list.sort((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue()));
여기에선
- List로 변환하는 과정 -> O(N)
- 자바의 정렬에선 Timsort 알고리즘을 사용한다.
- Timsort -> O(N Log N)
즉 O(N Log N)이 될것으로 예상할 수 있다.
✅ 내가 쓴 정답 코드
그대로 코드로 작성해주면 !
import java.util.*;
class Solution {
public int solution(int k, int[] tangerine) {
//각 사이즈별로 귤의 개수를 담는 HashMap
HashMap<Integer, Integer> count = new HashMap<Integer, Integer>();
int n = tangerine.length;
int t = 0;
//귤 사이즈 개수 체크
for (int i=0; i<n; i++) {
t = tangerine[i];
if (count.containsKey(t)) {
count.put(t,count.get(t)+1);
}
else {
count.put(t, 1);
}
}
//value (개수) 기준 내림차순 정렬
List<Map.Entry<Integer,Integer>> list = new ArrayList<>(count.entrySet());
list.sort((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue()));
// 귤 담기 (그리디)
int answer = 0;
for (Map.Entry<Integer, Integer> entry : list) {
if (k <= 0)
break;
k -= entry.getValue();
answer += 1;
}
return answer;
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[MySQL][Lv.1] 경기도에 위치한 식품창고 목록 출력하기 (ISNULL) (0) | 2023.11.04 |
---|---|
[BFS][Lv.4] 트리 트리오 중간값 - 파이썬(Python) (0) | 2023.11.03 |
[MYSQL][lv.3] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (2) | 2023.10.29 |
[MYSQL][lv.2] 조건에 부합하는 중고거래 상태 조회하기 (0) | 2023.10.29 |
[MYSQL][lv.1] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2023.10.29 |