연속 부분 수열 합의 개수

공부한것 다 기록해·2023년 8월 7일
0

원순열이므로 배열을 하나 더 이어주었다.
반복문을 이용해서 1개씩, 2개씩, ... elements의 갯수개씩 더해주고, 중복 제거를 위해 HashSet을 사용해서 더해준 값을 추가해주었다.

기존 배열을 하나 더 추가해준 것이 이 문제의 핵심 로직이라고 생각한다!

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

        Set<Integer> set = new HashSet<>();

        for (int i = 1; i <= elements.length; i++) {
            getSum(i,set,elements);
        }

        answer = set.size();

        return answer;
    }

    public void getSum(int i, Set<Integer> set, int[] elements){

        // i개씩 묶기
        int[] newElements = new int[elements.length*2];

        System.arraycopy(elements,0,newElements,0,elements.length);
        System.arraycopy(elements,0,newElements,elements.length,elements.length);

        for (int j = 0; j < elements.length; j++) {
            int sum = 0;
            for (int k = j; k < j+i; k++) {
                sum += newElements[k];
            }
            set.add(sum);
        }
    }

0개의 댓글