N
(Leet Code JS)Non-decreasing Array 본문
https://leetcode.com/problems/non-decreasing-array/
Non-decreasing Array - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
주어진 nums 배열을 최대 1개의 원소만 바꿔서 오름차순 정렬이 가능한지 확인하는 문제.
변경 여부를 확인할 수 있는 flag인 isModified = false로 선언한다.
for문으로 nums를 순회하는데, 인덱스는 1부터 시작한다.
만약 현재 방문한 원소가 이전 원소보다 값이 작다면 수를 바꿔주어야 한다.
그러나 이미 원소를 바꾼 적이 있다면, false를 리턴한다.
그렇지 않다면 isModifed = true로 갱신하고 조건대로 원소를 바꿔준다.
문제에서 오름차순 정렬 조건은 nums[i] <= nums[i + 1]로 정의되어 있다.
그렇기 때문에 연속된 숫자가 포함된 오름차순 정렬이 가능하다.
또한, 수를 바꿔주는 것은 i번째나 i - 1을 바꿔서 정렬 순서를 맞춰주면 된다.
nums[i - 1]를 바꿔주는 조건은 2가지 중 하나를 만족하면 된다.
1) 현재 순회하는 i가 1인 경우
2) nums[i - 2] <= nums[i]인 경우
위 조건 중 하나를 만족한다면,
nums[i - 1] = nums[i]로 갱신한다.
그외 다른 경우는 nums[i] = nums[i - 1]로 바꿔준다.
이렇게 하면 for문을 빠져나오게 된 경우만 오름차순 정렬이 가능하며,
그렇지 않은 경우는 for문 도중에 false를 리턴한다.
const checkPossibility = (nums) => {
let isModified = false;
for(let i = 1; i < nums.length; i++){
if(nums[i] < nums[i - 1]){
if(isModified){
return false;
} else{
isModified = true;
}
if(i === 1 || nums[i - 2] <= nums[i]){
nums[i - 1] = nums[i];
} else{
nums[i] = nums[i - 1];
}
}
}
return true;
};
'Leet Code 알고리즘' 카테고리의 다른 글
(Leet Code JS)Maximum Units on a Truck (0) | 2022.07.09 |
---|---|
(Leet Code JS)Furthest Building You Can Reach (0) | 2022.07.03 |
(Leet Code JS)Delete Operation for Two Strings (0) | 2022.06.23 |
(Leet Code JS)Maximum Erasure Value (0) | 2022.06.18 |
(Leet Code JS)Hamming Distance (0) | 2022.05.13 |