반응형
https://school.programmers.co.kr/learn/courses/30/lessons/132265
package Programmers;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class 롤케이크자르기 {
public static void main(String[] args){
롤케이크자르기 T = new 롤케이크자르기();
int[] topping = {1, 2, 1, 3, 1, 4, 1, 2};
T.solution(topping);
}
public int solution(int[] topping) {
int answer = 0;
Set<Integer> set = new HashSet<>();
Map<Integer, Integer> map = new HashMap<>();
//Map에다가 전체 토핑의 개수를 구한다.
for (int i = 0; i < topping.length; i++) {
map.put(topping[i], map.getOrDefault(topping[i], 0) + 1);
}
//토핑배열 첫번째부터 돌면서 Set에는 i위치의 토핑을 추가 해줘가면서 Map에 추가한 토핑 개수랑 비교한다.
for (int i = 0; i < topping.length; i++) {
set.add(topping[i]);
map.put(topping[i], map.get(topping[i]) -1 );
if(map.get(topping[i]) == 0) map.remove(topping[i]);
if(set.size() == map.size()) answer++;
}
return answer;
}
}
1. topping 배열 돌면서 Map에다가 전체 토핑개수를 더한다.
2. topping 배열 다시 돌면서 Set에다가 추가해서 중복제거해가면서 추가.
3. Map에는 Set에 추가한만큼 빼준다.
4. Map 크기가 0이면 크기 비교를 위해서 map에서 삭제해준다.
5. Set 크기와 Map 크기 비교
※ 뻘짓
map.put(topping[i], map.getOrDefault(map.get(topping[i]), 0) + 1);
아래와 같이 변경함 getOrDefault 메서드 잘못씀
map.put(topping[i], map.getOrDefault(topping[i], 0) + 1);
걍 키값만 넣어주면 value 알아서 구해온다.
반응형
'기타 > 알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 연속 부분 수열 합의개수 Lv2 Java (0) | 2023.05.12 |
---|---|
[알고리즘] 프로그래머스 - 택배상자 Lv.02 Java (0) | 2023.05.11 |
[알고리즘] 프로그래머스 - 콜라문제 LV.1 JAVA (0) | 2023.05.10 |
[알고리즘] 프로그래머스 - 과일장수 Lv1 Java (0) | 2023.05.10 |
[알고리즘] 프로그래머스 옹알이2 lv1 java (0) | 2023.05.08 |