https://school.programmers.co.kr/learn/courses/30/lessons/178870
첫 값부터 시작해서 연속적인 값들의 합을 구하면 된다.
그리고 원하는 값이랑 같을경우 그 값의 시작 인덱스와 끝 인덱스의 차이만큼과 그전의 차이와 비교해서 차이가 그전의 차이보다 작은 경우 갱신
2중으로 돌경우 시간초과가 발생이 가능 -> 투포인터 알고리즘을 통해서 진행하였습니다.
투 포인터 알고리즘
class Solution {
public int[] solution(int[] sequence, int k) {
int answer[] = new int[2];
int length = sequence.length;
//
int start = 0;
int end = 0;
//둘의 인덱스 차이
int diff = Integer.MAX_VALUE;
int sum_check = 0;
while (start < length) {
//end가 끝에 도달했을경우
if (end == length) {
sum_check -= sequence[start++];
if (sum_check == k) {
if(diff > end - start +1){
answer[0] = start;
answer[1] = end-1;
diff = end - start +1;
}
}
continue;
}
//중간지점 계산
if (sum_check <= k) {
sum_check += sequence[end++];
} else if (sum_check > k) {
sum_check -= sequence[start++];
}
//sum_check 가 k와 같은경우
if (sum_check == k) {
if(diff > end - start +1){
answer[0] = start;
answer[1] = end-1;
diff = end - start +1;
}
}
}
return answer;
}
}