Coding Test/Programmers

[Java][Programmers] 연속 부분 수열 합의 개수

예롱메롱 2025. 3. 17. 16:51
728x90
반응형
 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


📌 접근 방식

🔸 1. 원형 수열이란?

  • 일반 수열처럼 처음부터 끝까지만 보는 것이 아니라,
  • 마지막 요소 뒤에 첫 요소가 다시 연결되어 있는 것처럼 생각.
  • 예: [7, 9, 1, 1, 4] → 원형으로 보면 [7, 9, 1, 1, 4, 7, 9, 1, 1, 4, ...] 처럼 시작 위치에 따라 연결되어 감싸지는 구조.

🔸 2. 연속 부분 수열 합이란?

  • 길이 1부터 전체 길이까지 가능한 모든 연속 부분 수열을 잡아,
  • 그 부분 수열의 합을 구함
  • 예: [7, 9, 1, 1, 4]
    • 길이 1 → [7], [9], [1], [1], [4] → 합: 7, 9, 1, 1, 4
    • 길이 2 → [7,9], [9,1], ..., [4,7] → 끝에서 시작까지도 포함해야 함

🔸 3. 중복 제거를 위해 Set 사용

  • 합의 결과 중복을 제거하기 위해 HashSet에 담음

🔸 4. 원형 처리를 위한 인덱스 순환

  • j % elements.length 사용해서 인덱스가 범위를 벗어날 경우 순환 처리

PASS CODE

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;

        Set<Integer> set = new HashSet<>();
        int len=1;
        while(true) {
            int sum = 0;
            for(int i=0; i<elements.length; i++) {
                sum = 0;
                if(len==1) {
                    set.add(elements[i]);
                }
                for(int j=i; j<len+i; j++){
                    int k = j;
                    if(j >= elements.length) {
                        k=j % elements.length;
                    }
                    sum += elements[k];
                }
                set.add(sum);
            }
            if(len == elements.length) {
                break;
            }
            len ++;
        }
        answer = set.size();
        return answer;
    }
}
728x90
반응형