본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 연속 부분 수열 합의 개수

by 현장 2026. 1. 2.

-Code

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int length = elements.length;
        // 연결리스트이므로 확장
        int[] extend = new int[length * 2];
        for (int i = 0; i < length * 2; i++) {
            extend[i] = elements[i % length];
        }
        // 중복이 없으므로 Set 선언
        Set<Integer> totalSum = new HashSet<>();
        // 길이에 따른 합 계산
        for (int len = 1; len <= length; len++) {
            // 시작점을 바꾸기
            for (int start = 0; start < length; start++) {
                // 길이만큼 더해서 저장
                int sum = 0;
                for (int i = start; i < start + len; i++) {
                    sum += extend[i];
                }
                totalSum.add(sum);
            }
        }
        return totalSum.size();
    }
}

원형 구조를 어떻게 해야 풀 수 있을까에 대해서 고민을 하다 시작을 못했었습니다. 그러나 길이를 배수로 늘려서 수를 저장하고 하면 마지막 수의 최대 길이만큼 더할 수 있으므로 이를 알게 된 후 쉽게 해결할 수 있었습니다.