코린이의 소소한 공부노트

[LeetCode/Easy] 896. Monotonic Array 본문

코딩테스트 풀이/JAVA

[LeetCode/Easy] 896. Monotonic Array

무지맘 2022. 12. 10. 19:36

1. Input

1) int 배열 nums

 

2. Output

1) nums의 요소가 계속 감소하거나 계속 증가하면 true, 아니면 false를 반환

2) 계속 증가한다는 것은 모든 i <= j에 대해 nums[i] <= nums[j]라는 것이고, 계속 감소한다는 것은 모든 i <= j에 대해 nums[i] >= nums[j]라는 것이다.

 

3. Constraint

1) 1 <= nums.length <= 10^5

2) - 10^5 <= nums[i] <= 10^5

 

4. Example

Input: nums = [1,3,2] -> Output: false

Input: nums = [6,5,4,4] -> Output: true

 

5. Code

1) 첫 코드(2022/07/11)

boolean answer = true;
if(nums.length == 1)
    return answer;

if(nums[0]<nums[1]){
    for(int i=1 ; i<nums.length-1 ; i++)
        if(nums[i]>nums[i+1]){
            answer = false;
            break;
        }
}else if(nums[0]==nums[1]){
    int index = 0;
    for(int i=1 ; i<nums.length-1 ; i++)
        if(nums[i]!=nums[i+1]){
            index = i;
            break;
    }
    if(nums[index]>nums[index+1]){
        for(int i=index+1 ; i<nums.length-1 ; i++)
            if(nums[i]<nums[i+1]){
                answer = false;
                break;
            }
    } else{
        for(int i=index+1 ; i<nums.length-1 ; i++)
            if(nums[i]>nums[i+1]){
                answer = false;
                break;
            }
    }
} else{
    for(int i=1 ; i<nums.length-1 ; i++)
        if(nums[i]<nums[i+1]){
            answer = false;
            break;
        }
}
return answer;

2) 다시 풀어본 코드(2022/12/10)

boolean answer = true;
if(nums[0] - nums[nums.length-1] < 0){
    for(int i=0 ; i<nums.length-1 ; i++)
        if(nums[i]>nums[i+1]){
            answer = false ; break;
        }
} else{
    for(int i=0 ; i<nums.length-1 ; i++)
        if(nums[i]<nums[i+1]){
            answer = false ; break;
        }
}
return answer;

  - 1번보다 훨씬 간결하면서도 빠르고, 공간절약도 많이 된다.