[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/132265
[풀이]
포인터를 이동시켜가며 오른쪽 해시맵에 있던 토핑을 왼쪽 해시맵으로 옮겨준다. 이후 해시맵의 크기를 비교해가며 크기가 같으면 answer를 증가시킨다.
처음에는 중복없이 토핑 종류의 개수만 저장하기 위해 Set을 사용하려 했으나 이 경우 전체 토핑이 한 번에 삭제되기 때문에 토핑의 종류와 개수를 함께 저장할 수 있는 HashMap을 이용해주었다.
[코드]
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
//롤케이크를 공평하게 자르는 방법의 수를 return
Map<Integer, Integer> left = new HashMap<>();
Map<Integer, Integer> right = new HashMap<>();
left.put(topping[0], 1);
for(int i=1; i<topping.length; i++){
right.put(topping[i], right.getOrDefault(topping[i], 0)+1);
}
if(left.size()==right.size()) answer = 1;
for(int i=1; i<topping.length; i++){
if(right.get(topping[i])>1){
right.replace(topping[i], right.get(topping[i])-1);
}
else right.remove(topping[i]);
left.put(topping[i], left.getOrDefault(topping[i], 0)+1);
if(left.size() < right.size()){
continue;
}
else if(left.size()==right.size()){
answer++;
}
else break;
}
return answer;
}
}
'알고리즘 공부 및 문제 풀이 > 프로그래머스(PRO)' 카테고리의 다른 글
[pro] 프로그래머스 level2 131127 할인 행사 (Java) - 시뮬레이션 (0) | 2023.03.06 |
---|---|
[pro] 프로그래머스 level2 134239 우박수열 정적분 (Java) - 시뮬레이션 (0) | 2023.03.04 |
[pro] 프로그래머스 level2 135807 숫자 카드 나누기 (Java) - 시뮬레이션 (0) | 2023.03.03 |
[pro] 프로그래머스 level2 140107 점 찍기 (Java) - 시뮬레이션 (0) | 2023.03.03 |
[pro] 프로그래머스 level2 142085 디펜스 게임 (Java) - 시뮬레이션 (0) | 2023.03.02 |