[JAVA 문제 풀이] 284. 연속 부분 수열 합의 개수

프로그래머스 (131701)
Stupefyee's avatar
May 28, 2025
[JAVA 문제 풀이] 284. 연속 부분 수열 합의 개수
notion image
notion image
notion image
 

내가 작성한 코드

import java.util.*; class Solution { public int solution(int[] elements) { Set<Integer> uniqueSums = new HashSet<>(); // 수열 합 중복 제거를 위한 set int n = elements.length; // 길이 반복 for (int length = 1; length <= n; length++) { // 시작점 반복 for (int start = 0; start < n; start++) { int sum = 0; // 현재 길이의 부분 수열 합 계산 for (int i = 0; i < length; i++) { sum += elements[(start + i) % n]; } uniqueSums.add(sum); } } return uniqueSums.size(); } }
 

다른 사람의 코드

import java.util.*; class Solution { public int solution(int[] elements) { Set<Integer> set = new HashSet<>(); int[] dp = new int[elements.length]; // 각 인덱스를 시작점으로 하는 누적합을 저장하는 용도 // 부분 수열의 길이: 1부터 배열 전체 길이까지 시도 for (int len = 1; len <= elements.length; len++) { // 인덱스 i부터 길이 len만큼 더한 누적합 for (int i = 0; i < elements.length; i++) { dp[i] += elements[(len + i - 1) % elements.length]; set.add(dp[i]); } } return set.size(); } }
 
Share article

stupefyee