반응형
1. 문제
- 0과 1로 이루어진 배열 nums가 주어지고 정수 k가 주어질 때, k번 만큼만 0을 1로 바꿔 연속된 1의 길이가 가장 긴 경우를 구하라.
2. 해결
function longestOnes(nums: number[], k: number): number {
let left = 0, right = 0;
let max = Number.MIN_SAFE_INTEGER;
let count = 0;
while(right < nums.length) {
if(nums[right] === 0) count++;
while(count > k) {
if(nums[left] === 0) count--;
left++;
}
max = Math.max(max, right-left + 1);
right++;
}
return max;
};
- 일단 못풀었다.
- 핵심은 범위 안에 k가 0인 상태를 유지하는 것.
- right가 증가하면서 0을 만날 때 마다 count를 증가.
- count가 k개를 넘어선 경우, left를 당겨와 count가 k와 같거나 작아질 때 까지 반복.
- 인덱스 차이를 이용해 max값 갱신.