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

Yujin·2025년 6월 18일

CodingTest

목록 보기
14/51

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131701

문제풀이 방법

배열의 크기가 elements 의 2배인 배열 생성 [7,9,1,1,4] -> [7,9,1,1,4,7,9,1,1,4]
중복제거 -> HashSet 이용(중복된 값은 자동 제거)
처음엔 하나씩 넣기, 두번째에는 두개씩 더해서 넣기...elements.length까지...

나의 코드

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int n = elements.length;
        int[] array = new int[n * 2];
        
        //배열을 두번 이어 붙힌다. -> 마지막 원소의 덧셈을 위해서
        for (int i = 0; i < n; i++) {
            array[i] = elements[i];
            array[i + n] = elements[i];
        }
        
        HashSet<Integer> set = new HashSet<>();
        // length : 길이가 1인 연속 부분수열, 2인 연속 부분수열...
        // start : 덧셈을 시작하는 원소
        for (int length = 1; length <= n; length++) {
            for (int start = 0; start < n; start++) {
                int sum = 0;
                for (int k = 0; k < length; k++) {
                    sum += array[start + k];
                }
                set.add(sum);
            }
        }
        
        //집합의 크기 (중복되지 않는 합의 개수)
        return set.size();
    }
}

0개의 댓글