diff --git a/programmers/롤케이크 자르기/solution.java b/programmers/롤케이크 자르기/solution.java new file mode 100644 index 0000000..9193dd7 --- /dev/null +++ b/programmers/롤케이크 자르기/solution.java @@ -0,0 +1,57 @@ +// [문제 링크]: https://school.programmers.co.kr/learn/courses/30/lessons/132265 + +import java.util.*; + +class Solution { + public int solution(int[] topping) { + Cake cake = new Cake(); + return cake.split(topping); + } +} + +class Cake { + private Map myTopping = new HashMap<>(); + private Set brothersTopping = new HashSet<>(); + + private void putToppingCnt(int[] toppings) { + for (int topping : toppings) { + int cnt = myTopping.getOrDefault(topping, 0); + myTopping.put(topping, cnt + 1); + } + } + + public int split(int[] toppings) { + putToppingCnt(toppings); + return toppingEqualCnt(toppings); + } + + private int toppingEqualCnt(int[] toppings) { + int equalCnt = 0; + + for (int topping : toppings) { + moveTopping(topping); + + if (myTopping.size() < brothersTopping.size()) { + break; + } + + if (myTopping.size() == brothersTopping.size()) { + equalCnt++; + } + } + + return equalCnt; + } + + private void moveTopping(int topping) { + brothersTopping.add(topping); + int toppingCnt = myTopping.get(topping); + + if (toppingCnt == 1) { + myTopping.remove(topping); + return; + } + + myTopping.put(topping, toppingCnt - 1); + } +} \ No newline at end of file