반응형
1. 문제
- 배열 nums가 주어졌을 때, 이를 탐색하여 target보다 크거나 같은 값을 가지는 subarray의 가장 짧은 길이를 반환하시오.
2. 해결
function minSubArrayLen(target: number, nums: number[]): number {
let pointer1 = 0, pointer2 = 0;
let result = Number.MAX_SAFE_INTEGER, window=0;
while(pointer1 < nums.length && pointer2 < nums.length) {
if(window + nums[pointer2] < target) {
window+= nums[pointer2++];
} else {
result = Math.min((pointer2 - pointer1)+ 1, result)
window -= nums[pointer1++];
}
}
return result === Number.MAX_SAFE_INTEGER ? 0 : result;
};
- 슬라이딩 윈도우를 써서 풀어봤다. 개념 자체는 알고 있었는데 관련 문제는 처음 풀어보는 거 같다.
- 이 문제에서 윈도우 내 합이 target보다 작으면, pointer2를 이동시켜 확장하고 크거나 같으면 result 변수에 최소 길이를 계산해서 저장해두고 pointer1을 이동시킨다.
- 슬라이딩 윈도우는 고정, 가변 크기 모두 적용할 수 있고 문제 요구사항에 따라 연속된 데이터를 끝까지 탐색할 필요가 없을 수도 있다.
- 이 문제의 경우, subarray가 가장 짧은 경우를 찾아야 하므로 배열의 끝까지 탐색을 수행한다.