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

이은정·2024년 10월 6일

프로그래머스/Java

목록 보기
52/74

문제

로직

원형 수열이기 때문에 배열을 2번 반복하여야 한다.
배열을 2번 반복한 것을 새로운 배열에 저장한다.
배열의 사이즈만큼 반복문을 실행한다.
number를 1부터 number가 배열 사이즈가 되기 전까지 반복문을 실행한다.
elements[i:number+i]까지의 합계를 구한다.
구한 합계들을 sums라는 list에 저장한다.

list에서 중복을 제거한 후 list의 크기를 반환한다.

코드

import java.util.*;
import java.util.stream.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        List<Integer> sums = new ArrayList<>();
        
        int size = elements.length;
        int[] repeatedElements = IntStream.concat(Arrays.stream(elements), Arrays.stream(elements)).toArray();
        
        for (int i = 0; i < size; i ++) {
            for (int num = 1; num <= size; num ++) {
                int[] subElements = Arrays.copyOfRange(repeatedElements, i, num+i);
                
                sums.add(Arrays.stream(subElements).sum());
            }
        }
        
        sums = sums.stream().distinct().collect(Collectors.toList());
        
        return sums.size();
    }
}

결과

profile
돈 많은 백수가 꿈인 백엔드 개발자 지망생

0개의 댓글