From 8f9c92d6fbb9deea8b7aeece29c70a9cdd2ce30f Mon Sep 17 00:00:00 2001 From: rl544 <111494264+rl544@users.noreply.github.com> Date: Fri, 3 Feb 2023 20:20:32 +0900 Subject: [PATCH] =?UTF-8?q?uploaded=20at=202023.=202.=203.=20=EC=98=A4?= =?UTF-8?q?=ED=9B=84=208:20:31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- programmers/롤케이크 자르기/solution.java | 57 +++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 programmers/롤케이크 자르기/solution.java 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