코딩 공부/Leetcode

[Python] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray

일하는 공학도 2025. 2. 3. 10:54
728x90

난이도 : easy

 

리스트 nums 내의 strictly increasing이나 strictly decreasing하는 subarray 중, 가장 긴 subarray의 길이를 return하는 문제

 

class Solution:
    def longestMonotonicSubarray(self, nums: List[int]) -> int:
        n = len(nums)
        a = [
            len(nums[i:j])
            for i in range(n)
            for j in range(i+2, n+1)
            if all(nums[k] < nums[k+1] for k in range(i, j-1))]
        
        b = [
            len(nums[i:j])
            for i in range(n)
            for j in range(i+2, n+1)
            if all(nums[k] > nums[k+1] for k in range(i, j-1))]
        
        return max(a+b) if len(a+b) > 0 else 1

a와 b라는 리스트 컴프리헨션을 제작.

a는 strictly increasing, b는 strictly decreasing한 case라는 조건을 충족하는 subarray 리스트의 길이를 리스트로 나타냄.

리스트 a와 리스트 b를 합한 값의 max를 return하되,

리스트 a + b가 0이라면(ex.2와 같은 case로 해당 사항이 하나도 없으면) 1을 return

 

Runtime : 167ms (5.83%)

Memory : 17.84MB (33.50%)

728x90