프로그래머스 롤케이크 자르기 (Java, 자바)

jonghyukLee·2023년 8월 28일
0

이번에 풀어본 문제는
프로그래머스 롤케이크 자르기 입니다.

📕 문제 링크

❗️코드

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
class Solution {
    public int solution(int[] topping) {
        int answer = 0;
        int toppingSize = topping.length;
        Set<Integer> left = new HashSet<>();
        Map<Integer, Integer> right = new HashMap<>();

        left.add(topping[0]);
        for (int i = 1; i < toppingSize; i++) right.put(topping[i], right.getOrDefault(topping[i], 0) + 1);

        // 초기값 확인
        if (left.size() == right.size()) answer++;

        for (int i = 1; i < toppingSize; i++) {
            int next = topping[i];
            
            // 왼쪽 추가
            left.add(next);
            // 오른쪽 감소 or 제거
            decreaseOrRemove(right, next);
            
            if (left.size() == right.size()) answer++;
        }
        return answer;
    }
    static void decreaseOrRemove(Map<Integer, Integer> map, int key) {
        int currentValue = map.get(key);

        if (currentValue == 1) map.remove(key);
        else map.put(key, map.get(key) - 1);
    }
}

📝 풀이

각 토핑의 개수가 아닌 토핑의 가짓수만 비교하면 되는 문제입니다.
따라서, HashMap에 두 형제의 토핑 보유 상태를 저장했을 때, key값의 개수 즉 HashMap의 크기만 비교하면 공평한지 여부를 확인할 수 있습니다.
저의 경우 첫 번째 인덱스를 동생에게 준 상태를 시작으로 한 칸씩 늘려나가며 동생에게 토핑을 추가하는 로직을 구성했기 때문에, 동생 쪽은 value가 중요하지 않았습니다. 따라서 동생은 HashSet을 사용하는 방향으로 풀이해보았습니다.

profile
머무르지 않기!

0개의 댓글