처음에는 단순히 슬라이딩 윈도우를 사용해서 풀려고 시도했다.
그러나 부분 수열의 크기가 고정되어 있지 않아서 풀이에 많은 시간이 걸렸다.
최종 코드
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;
}
}
'코딩 테스트' 카테고리의 다른 글
(Java) 프로그래머스 - 숫자 변환하기 (0) | 2023.05.05 |
---|---|
(Java) 프로그래머스 - 뒤에 있는 큰 수 찾기 (0) | 2023.05.04 |
(Java) 프로그래머스 - 공원 산책 (0) | 2023.04.26 |
(Java) 프로그래머스 - 개인정보 수집 유효기간 (0) | 2023.04.25 |
(Java) 백준 15652 - N과 M (4) (0) | 2023.02.17 |