코딩 테스트
(Java) 프로그래머스 - 연속 부분 수열 합의 개수
로승리
2023. 4. 28. 17:29
처음에는 단순히 슬라이딩 윈도우를 사용해서 풀려고 시도했다.
그러나 부분 수열의 크기가 고정되어 있지 않아서 풀이에 많은 시간이 걸렸다.
최종 코드
import java.util.*;
class Solution {
public int solution(int[] elements) {
int answer = 0;
// 부분 수열 크기
int size = 1;
Set<Integer> set = new HashSet<>();
// 부분 수열 크기가 elements 길이가 될때까지 반복
while (size <= elements.length) {
int sum = 0;
// 부분 수열의 시작을 set에 추가
for (int i = 0; i < size; i++) {
sum += elements[i % elements.length];
set.add(sum);
}
// 시작 인덱스부터 elements 끝까지 한칸씩 밀며 진행
for (int i = 0; i < elements.length; i++) {
sum -= elements[i % elements.length];
sum += elements[(i + size) % elements.length];
set.add(sum);
}
size++;
}
answer = set.size();
return answer;
}
}