Algorithm/Programmers

[Programmers] 연속 부분 수열 합의 개수 / ⭕

cks._.hong 2024. 10. 3. 23:40
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 제출 코드 (21분 32초 / 구현)

import java.util.*;

class Solution {
    public int solution(int[] elements) {
        int answer = 0;
        Set<Integer> set = new HashSet<>();
        
        for(int i = 1; i <= elements.length; i++) {
            for(int j = 0; j < elements.length; j++) {
                int temp = 0;
                int idx = j;
                int cnt = 0;
                while(cnt < i) {
                    if(idx >= elements.length) {
                        idx = 0;
                    }
                    temp += elements[idx++];
                    cnt++;
                }
                set.add(temp);
            }
        }

        answer = set.size();
        return answer;
    }
}

 

2. 구현 로직

  1. for문을 이용하여 연속 부분 수열의 길이 지정
  2. 2중 for문을 작성하여 수열이 시작하는 위치를 갱신
  3. whlie문을 통해 연속 부분 수열의 합을 구하는데 원형 수형이므로 idx가 elements의 길이를 넘어가면 0으로 갱신
  4. 나온 값을 set에 저장하여 중복 제거