Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 리스트가 엄격하게 증가하거나 감소하는지 확인하는 프로그램

숫자로 이루어진 리스트가 주어졌을 때, 해당 리스트가 엄격하게 증가하는지 또는 엄격하게 감소하는지 확인해야 합니다. 여기서 '엄격하게'라는 것은 인접한 두 요소가 같은 값을 가질 수 없다는 의미입니다.

예를 들어 입력이 nums = [10, 12, 23, 34, 55]라면 출력은 True가 됩니다. 모든 요소가 서로 다르고 각 요소가 바로 앞의 요소보다 크기 때문에, 이 리스트는 엄격하게 증가하는 리스트이기 때문입니다.

문제 해결 접근 방법

이 문제는 다음 단계를 통해 해결할 수 있습니다.

  • nums의 길이가 2 이하라면 True를 반환합니다. (요소가 2개 이하일 때는 항상 조건을 만족)
  • nums의 모든 요소가 고유하지 않다면(중복이 있다면) False를 반환합니다.
  • ordered := nums를 오름차순으로 정렬한 리스트로 설정합니다.
  • nums가 ordered와 같거나, ordered를 뒤집은 결과와 같으면 True를 반환하고, 그렇지 않으면 False를 반환합니다.

구현 예제

아래 구현을 통해 더 잘 이해할 수 있습니다.

class Solution:
   def solve(self, nums):
      if len(nums) <= 2:
         return True
      if len(set(nums)) != len(nums):
         return False
      ordered = sorted(nums)
      return nums == ordered or nums == ordered[::-1]
ob = Solution()
print(ob.solve([10, 12, 23, 34, 55]))

입력

[10, 12, 23, 34, 55]

출력

True

코드 설명

이 코드의 핵심 로직은 다음과 같습니다.

  • 길이 검사: 요소가 2개 이하인 리스트는 항상 엄격하게 증가하거나 감소한다고 볼 수 있으므로 True를 반환합니다.
  • 중복 검사: set(nums)의 길이와 원래 리스트의 길이를 비교하여 중복 요소가 있는지 확인합니다. 중복이 있으면 엄격한 조건을 만족할 수 없습니다.
  • 정렬 비교: 정렬된 리스트와 원본 리스트가 일치하면 엄격하게 증가하는 것이고, 정렬된 리스트의 역순과 일치하면 엄격하게 감소하는 것입니다.

이 방법의 시간 복잡도는 정렬에 의해 지배되므로 O(n log n)이며, 공간 복잡도는 정렬된 복사본을 저장하기 위해 O(n)입니다.