title: "코딩테스트 연습 - 롤케이크 자르기"
image: "https://image.freepik.com/free-vector/landing-page-template-for-a-website_23-2147782747.jpg"
description: "철수는 롤케이크를 두 조각으로 잘라서 동생과 한 조각씩 나눠 먹으려고 합니다. 이 롤케이크에는 여러가지 토핑들이 일렬로 올려져 있습니다. 철수와 동생은 롤케이크를 공평하게 나눠먹으려 하는데, 그들은 롤케이크의 크기보다 롤케이크 위에 올려진 토핑들의 종류에 더 관심이 많습니다. 그래서 잘린 조각들의 크기와 올려진 토핑의 개수에 상관없이 각 조각에 동일한 가짓수의 토핑이 올라가면 공평하게 롤케이크가 나누어진 것으로 생각합니다."
url: "https://school.programmers.co.kr/learn/courses/30/lessons/132265"
문제 풀이
문제 접근
간단한 수도 코드 정리
Type/Paste Your Code
풀이 코드
importjava.util.*;classSolution{publicintsolution(int[]topping){intanswer=0;intleft=0;intright=topping.length-1;// Initialize sets for left and right side toppingsSet<Integer>leftSet=newHashSet<>();Set<Integer>rightSet=newHashSet<>();// Array to store unique topping count up to each index from the leftint[]leftUnique=newint[topping.length];for(inti=0;i<topping.length;i++){leftSet.add(topping[i]);leftUnique[i]=leftSet.size();}// Array to store unique topping count up to each index from the rightint[]rightUnique=newint[topping.length];for(inti=topping.length-1;i>=0;i--){rightSet.add(topping[i]);rightUnique[i]=rightSet.size();}// Compare the unique topping count in left and right part using binary searchfor(inti=0;i<topping.length-1;i++){if(leftUnique[i]==rightUnique[i+1]){answer++;}}returnanswer;}}