문제
문제링크
접근
- 처음에는 이전처럼 getNextIdx() 메서드를 만들어서, 끝값을 분기했었는데 너무 잦은 메서드 호출이 걱정되었다.
- 어차피 중복 값은 취급하면 안되기 때문에 배열에서 임시로 같은 배열을 뒤에 붙이면 모든 경우의 수를 다룰 수 있다.
풀이
import java.util.*;
class Solution {
public int solution(int[] elements) {
int size = elements.length;
int[] nums = new int[size * 2];
int[] sums = new int[size * 2];
System.arraycopy(elements, 0, nums, 0, size);
System.arraycopy(elements, 0, nums, size, size);
Set<Integer> results = new HashSet<>();
int sum = 0;
for (int i = 0; i < size * 2; i++) {
sum += nums[i];
sums[i] = sum;
}
for (int i = 1; i <= size; i++) {
for (int j = 0; j < size; j++) {
results.add(sums[j+i] - sums[j]);
}
}
return results.size();
}
}