https://leetcode.com/problems/wiggle-subsequence/description/

class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
def wiggle(start):
flag = start
stk = []
for i in range(len(nums)):
if flag == 'minus':
if stk and stk[-1] >= nums[i]:
stk.pop()
else:
flag = 'plus'
else:
if stk and stk[-1] <= nums[i]:
stk.pop()
else:
flag = 'minus'
stk.append(nums[i])
return len(stk)
x = wiggle('plus')
y = wiggle('minus')
return max(x, y)
start -> 'plus', 'minus' 따로 생각
plus
-> stk의 마지막 값보다 큰 값이 들어와야 함 -> stk상단 pop (더 큰 값으로 갱신)
-> 작은 값이 들어오는 경우 -> minus 전환
minus
-> stk의 마지막 값보다 작은 값이 들어와야 함 -> stk상단 pop (더 작은 값으로 갱신)
-> 큰 값이 들어오는 경우 -> plus 전환