Leetcode Java Wiggle Subsequence
업데이트:
문제
코드
class Solution {
public int wiggleMaxLength(int[] nums) {
int up = 1;
int down = 1;
for (int idx = 1; idx < nums.length; idx++) {
if (nums[idx] > nums[idx - 1]) {
up = down + 1;
} else if (nums[idx] < nums[idx - 1]) {
down = up + 1;
}
}
return Math.max(up, down);
}
}
결과
설명
-
주어진 정수 배열 nums의 값들이 파동과 같이 높은 값 -> 낮은 값 -> 높은 값 형태로 구성된 최대 길이를 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- up은 현재의 값이 이전의 값보다 커지는 경우 증가시키기 위한 변수로, 1로 초기화한다.
- down은 현재의 값이 이전의 값보다 작아지는 경우 증가시키기 위한 변수로, 1로 초기화한다.
- nums를 두 번째 값부터 끝까지 탐색하여 up과 down에 횟수를 증가시킨다.
- up의 경우, 이전의 값과 비교하기 때문에 첫 값부터 탐색하는 것이 아니라 두 번째 값부터 탐색한다.
- nums의 idx번째 값이 nums의 $idx - 1$번째 값보다 큰 경우, up에 $down + 1$을 넣어준다.
- nums의 idx번째 값이 nums의 $idx - 1$번째 값보다 작은 경우, down에 $up + 1$을 넣어준다.
- up과 down에 반대 값의 1을 더한 값을 넣은 이유는, 점층적으로 증가 혹은 감소하는 값들의 횟수를 배제하기 위함이다.
- 반복이 완료되면 up과 down 중 큰 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기