배열안에서 두 개의 하위배열이 k 이상의 길이를 가지며 순차적으로 증가하고, 인접하는지 판단해야 한다.
index 를 가지고 nums[index + 1] > nums[index] 를 검사해가면서 하위배열의 길이 k를 찾아내면 된다. nums[index + 1] > nums[index] 의 조건이 깨지는 순간 1.이 배열의 인접한 배열의 앞 쪽 배열이 될 수 있는지 2.앞의 숫자보다 더 작아서 탐색조건을 초기화해야 하는지 를 판단해야 한다.
그리고 매번 iteration 이후 또는 원본 배열을 전부 돈 후 조건을 만족하는 하위배열들이 있는지 검사하면 된다.
경계조건, 초기화조건, 인덱스 기반 탐색에서 Edge Case 에 많은 신경을 써야 한다. 푸는데 한시간 넘게 걸릴 거라고는 생각하지 못했다. Easy 라고는 적혀있으나 실질적인 난이도는 Medium 이 되어야하지 않나 싶은 문제였다.
function hasIncreasingSubarrays(nums: number[], k: number): boolean {
let index = 0
let seqLength = 1
let hasFirstSeq = false
let resetFirstSeqFlag = false
if (k === 1) {
return nums.length >= 2
}
while (index <= nums.length - 2) {
if (nums[index + 1] > nums[index]) {
seqLength += 1
resetFirstSeqFlag = false
if (seqLength >= k * 2) {
return true
}
} else {
if (resetFirstSeqFlag) {
hasFirstSeq = false
resetFirstSeqFlag = false
}
if (seqLength >= k) {
hasFirstSeq = true
} else {
hasFirstSeq = false
}
if (!resetFirstSeqFlag) {
resetFirstSeqFlag = true
}
seqLength = 1
}
if (hasFirstSeq && seqLength >= k) {
return true
}
index += 1
}
return hasFirstSeq && seqLength >= k
};
