문제 설명
해결과정
Solution.java
class Solution {
public int[] solution(int[] sequence, int k) {
// 조건을 만족하는 부분수열의 인덱스 값을 반환할 정수형 배열 answer
int[] answer = new int [2];
// 부분수열의 원소들의 합
int totalNum = 0;
// 부분수열의 길이
int totalLength = sequence.length;
// 부분수열의 첫번째 원소
int firstIndex = 0;
// 부분수열을 찾기 위한 for문 실행
for(int i = 0; i < sequence.length; i++) {
// 부분수열의 원소
totalNum += sequence[i];
// 부분수열의 합이 k와 같다면
if(k == totalNum) {
// 현재 가장 짧은 길이의 부분수열 보다 짧은지 확인
if((i-firstIndex+1) < totalLength) {
answer[0] = firstIndex;
answer[1] = i;
totalLength = i-firstIndex+1;
}
}
// 부분수열의 합이 k보다 크다면
else if (k < totalNum) {
while(k < totalNum) {
// 부분수열의 맨 앞 원소들을 하나씩 제거해준다.
totalNum -= sequence[firstIndex];
firstIndex++;
}
if(k == totalNum) {
// 현재 가장 짧은 길이의 부분수열 보다 짧은지 확인
if((i-firstIndex+1) < totalLength) {
answer[0] = firstIndex;
answer[1] = i;
totalLength = i-firstIndex+1;
}
}
}
}
if(firstIndex == 0 && totalNum == k) {
answer[0] = 0;
answer[1] = sequence.length-1;
}
return answer;
}
}
Java
복사