[PS][Swift][LeetCode] 665. Non-decreasing Array

.onNext("Volga")·2023년 1월 21일
0

ProblemSolving

목록 보기
15/16

문제

문제 정리

문제의 본질은 감소하지 않는 배열을 구하는 것 입니다.

  • 감소한다는 것은, 감소 구간이 많아도 1개여야 한다는 것 (바꿀수 있는 지점이 단 1개)
  • 감소 하는 지점을 A, B 두 배열의 원소 사이라고 생각해 봅시다. (두 사이의 index를 idx 라고 생각합시다!, 즉 A의 index가 idx가 되겠습니다.)
  • A를 선택해서 변경할 경우, BA 이전에 나온 수 보다는 크거나 같아야 합니다.
  • B를 선택해서 변경할 경우, AB 다음에 나올 수보다 작거나 같아야 합니다.

수식으로 표현해보면 다음 과 같게 됩니다.

(nums[idx]<=nums[idx+2])(nums[idx1]<=nums[idx+1])(nums[idx] <= nums[idx + 2]) || (nums[idx - 1] <= nums[idx + 1])

코드

import Foundation

class Solution {
    let INF = 10000
    func checkPossibility(_ nums: [Int]) -> Bool {
        if nums.count <= 1 { return true }
        var nums = [-INF] + nums, idx = -1
        nums.append(INF)
        let limit = nums.count - 1
        
        for i in 1..<limit {
            if nums[i] > nums[i + 1] {
                if idx != -1 { return false }
                idx = i
            }
        }
        
        if idx == -1 { return true }
        return (nums[idx] <= nums[idx + 2]) || (nums[idx - 1] <= nums[idx + 1])
    }
}

후기

간단한 배열 문제였습니다.
생각할 것이 그리 많지는 않았습니다.

profile
iOS 개발자 volga입니다~

0개의 댓글