해당 문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/178870
문제의 제한사항이다. 배열의 크기가 1,000,000까지 될 수 있기다 O(n^2)이상의 시간복잡도 알고리즘을 사용하면 안된다고 판단했다.
투 포인트라는 알고리즘을 사용했는데 자세한 설명은 여기에서 도움 많이 받았다.
투 포인터라는 알고리즘을 이번 기회에 알 게 되었다. 혼자서 풀다보니 시간초과로 풀리지 않아서 해답을 보게되었는데 알고리즘 공부할 때 시간복잡도를 따져볼 수 있도록 연습을 많이 해야겠다.
public static int[] solution(int[] sequence, int k) {
int[] answer = {};
int max = sequence.length - 1;
int sum = sequence[0];
int start = 0;
int end = 0;
int size = Integer.MAX_VALUE;
while (true) {
if (sum == k) {
int currentSize = end - start + 1;
if (size > currentSize) {
size = currentSize;
answer = new int[]{start, end};
}
}
if (end == max && start == max) {
break;
}
if (sum < k && end < max) {
end++;
sum += sequence[end];
} else {
sum -= sequence[start];
start++;
}
}
return answer;
}