우당탕탕 개발일지
[프로그래머스] 귤 고르기 (Java, Lv.2) 본문
반응형
문제
귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값 구하기
입출력 예
풀이
1. Map<귤 크기, 개수> 초기화
1차 시도
1) Map<귤의 크기, 0> 초기화
-> For 문 사용
2) 초기화한 Key값에 대한 개수를 설정
-> 이중 For문 사용
결과 : 시간 초과로 인한 실패
2차 시도
Map<귤의 크기, 개수>로 초기화
map.getOrDefault(Key, DefaultValue) |
- Key : map에서 값을 가져올 Key 값
- DefaultValue : 지정된 키가 존재하지 않을 경우, 해당 값으로 초기화
=> 지정된 키가 존재하지 않을 경우, 두번쨰 매개변수를 통해 초기화하고 그렇지 않을 경우 해당 Value 반환
최종 코드
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Collections;
public class programmersLeve2 {
public static int solution(int k, int[] tangerine) {
System.out.println("귤 고르기");
int answer = 0;
HashMap<Integer, Integer> mappedSize = new HashMap<>();
// Map<귤 크기, 개수> 초기화
// getOrDefault 메소드 : 찾는 Key 값이 없을 경우, 두번째 인수값으로 설정됨.
for (int i = 0; i < tangerine.length; i++) {
mappedSize.put(tangerine[i], mappedSize.getOrDefault(tangerine[i], 0) + 1); // 귤 크기, 0
}
// // Map<귤 크기, 0> 초기화
// for (int i = 0; i < tangerine.length; i++) {
// mappedSize.put(tangerine[i], 0); // 귤 크기, 0
// }
// // Map<귤 크기, 개수>
// for (int key : mappedSize.keySet()) {
// for (int i = 0; i < tangerine.length; i++) {
// if (key == tangerine[i]) {
// int temp = mappedSize.get(key) + 1;
// mappedSize.put(key, temp);
// }
// }
// }
// Value 값들을 ArrayList에 저장
ArrayList<Integer> valuArrayList = new ArrayList<>(mappedSize.values());
// 내림차순 정렬
Collections.sort(valuArrayList, Collections.reverseOrder());
// 다른 종류 개수 찾아내기
for (int value : valuArrayList) {
if (k <= 0) {
break;
} else
answer++;
k -= value;
}
return answer;
}
public static void main(String[] args) {
int[] tangerine1 = { 1, 3, 2, 5, 4, 5, 2, 3 };
System.out.println(solution(1, tangerine1));
}
}
프로그머스 문제
https://school.programmers.co.kr/learn/courses/30/lessons/138476
반응형
'코테 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 보석 쇼핑(Java, Level.3) (0) | 2024.04.02 |
---|---|
[프로그래머스] 숫자게임(Java, Level.3) (1) | 2024.04.01 |
[프로그래머스] 최고의 집합(Java, Level.3) (0) | 2024.03.19 |
[프로그래머스] 야근지수 (Java, Level.3) (0) | 2024.03.14 |
[프로그래머스] 정수 삼각형(Java, Lv.3) (0) | 2024.03.12 |