반응형
https://leetcode.com/problems/valid-mountain-array/
1. 2022/04/23 시도
소요시간: 11분
class Solution {
public boolean validMountainArray(int[] arr) {
if (arr.length < 3) {
return false;
}
boolean isIncreasing = arr[0] < arr[1];
int prev = -1;
for (int each: arr) {
if (prev == each) {
return false;
}
if (isIncreasing) {
if (prev > each) {
isIncreasing = false;
}
} else {
if (prev < each) {
return false;
}
}
prev = each;
}
if (isIncreasing) {
return false;
}
return true;
}
}
풀이 접근 과정
edge케이스를 생각해보면 3개 미만의 array길이로는 산모양을 만들 수 없으므로 return false처리를 한다.
그리고 처음부터 increasing인지를 체크한다.
prev를 저장함으로써 현재값과 이전값을 비교한다.
- 만약 값이 같으면 이건 조건에 맞지 않으므로 무조건 종료한다.
- 만약 오름세라면 줄어들때를 피크라고 보고 내림세로 바꿔준다.
- 내림세에서는 다시 오름세로 가면 return false로 설정한다.
만약에 전체가 끝났는데도 오름세라면 그건 산으로 볼 수 없으니 false리턴 처리해준다.
모든 케이스가 끝나면 true를 리턴한다.
느낀점
- 오름세, 내림세를 판단하는걸 간단하게 하고 싶었는데 그걸 간단하게는 못해서 풀면서도 아쉬웠다.
- 처음부터 edge케이스를 조금 더 생각하면 좋았겠다.
- 솔루션에는 센스가 돋보인다. 길이라는 값을 이용해서 풀고 edge케이스 처리도 돋보인다.
class Solution {
public boolean validMountainArray(int[] arr) {
int N = arr.length;
int i = 0;
while (i < N-1 && arr[i] < arr[i+1]) {
i++;
}
if ( i==0 || i== N-1) {
return false;
}
while (i < N-1 && arr[i] > arr[i+1]) {
i++;
}
return i == N-1;
}
}
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.leetcode(26. Remove Duplicates from Sorted Array) (0) | 2022.04.25 |
---|---|
.leetcode(1299. Replace Elements with Greatest Element on Right Side) (0) | 2022.04.25 |
.leetcode(1346. Check If N and Its Double Exist) (0) | 2022.04.23 |
.leetcode(80. Remove Duplicates from Sorted Array II) (0) | 2022.04.16 |
.leetcode(88. Merge Sorted Array) (0) | 2022.04.16 |