철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다.
이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다.
철수와 동생은 롤케이크를 공평하게 나눠먹으려 하는데, 그들은 롤케이크의 크기보다 롤케이크 위에 올려진 토핑들의 종류에 더 관심이 많습니다.
그래서 잘린 조각들의 크기와 올려진 토핑의 개수에 상관없이 각 조각에 동일한 가짓수의 토핑이 올라가면 공평하게 롤케이크가 나누어진 것
으로 생각합니다.
롤케이크에 올려진 토핑들의 번호를 저장한 정수 배열 topping이 매개변수로 주어질 때, 롤케이크를 공평하게 자르는 방법의 수를 return 하도록 solution 함수를 완성해주세요.
- 1 ≤ topping의 길이 ≤ 1,000,000
- 1 ≤ topping의 원소 ≤ 10,000
import java.util.*;
class Solution {
public int solution(int[] topping) {
int answer = 0;
// 롤케이크를 두 조각으로 잘라서 동생과 나눠먹을 예정
// 롤케이크를 공평하게 나눠먹으려 함.
// 롤케이크의 크기보다 롤케이크 위에 올려진 토핑들의 종류에 더 관심이 많음.
// ** 잘린 조각들의 크기와 올려진 토핑의 개수에 상관없이
// 각 조각에 동일한 가짓수의 토핑이 올라가면 공평하게 롤케이크가 나누어진 것
Map<Integer,Integer> p1 = new HashMap<>();
Set<Integer> p2 = new HashSet<>();
for(int t : topping){
p1.put(t, p1.getOrDefault(t,0)+1);
}
for(int i = 0; i < topping.length; i++){
int t = topping[i];
p2.add(t);
p1.put(t, p1.get(t)-1);
if(p1.get(t) == 0) p1.remove(t);
if(p1.size() == p2.size()) answer++;
}
return answer;
}
}