(Java)프로그래머스 - 연속 부분 수열 합의 개수

윤준혁·2024년 4월 4일

나의 풀이

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        HashSet<Integer> set = new HashSet<>();
        
        for (int i = 1; i <= elements.length; i++) { // 1
            for (int j = 0; j < elements.length; j++) { // 2
                int sum = 0;
                for (int k = j; k < j + i; k++) { // 3
                    sum += elements[k % elements.length];
                }
                set.add(sum);
            }
        }
        
        return answer = set.size();
    }
}

과정

  1. 한개씩부터 모든 것을 더했을 때를 순회하는 반복문
  2. elements를 0번째부터 마지막까지 순회하는 반복문
  3. j부터 i번째까지의 합을 구하는 반복문(k % elements.length 이유 : 반복문의 중복을 피하고, 배열의 경계를 넘어서는 순환 부분 배열도 고려할 수 있음)

다른 사람 풀이

import java.util.*;

class Solution {
        public int solution(int[] elements) {
            Set<Integer> set = new HashSet<>();
            int[] dp = new int[elements.length];
            for(int len = 1;len <= elements.length; len++){
                for(int i = 0;i<elements.length;i++){
                    dp[i] += elements[(len+i-1)%elements.length];
                    set.add(dp[i]);
                }
            }
            return set.size();
        }
    }

0개의 댓글