[LeetCode] 1752. Check if Array Is Sorted and Rotated (Python)

2025. 2. 2. 13:37·코딩 테스트
728x90

Problem

 

Solution

Brute force

처음에 무슨 문제인지 이해하기 어려웠던 문제

어떤 위치 x 에서 일부를 잘라서 rotate 시키면 sorted array가 되는지 체크하는 문제.

0번 또는 1번째에 만들 수 있으면 True, 아니면 False 반환

 

힌트를 보니 아래와 같이 적혀있었다.

Brute force and check if it is possible for a sorted array to start from each position. 

class Solution:
    def checkSorted(self, arr):
        for i in range(len(arr) - 1):
            if arr[i] > arr[i + 1]:
                return False
        return True
    
    def check(self, nums: List[int]) -> bool:
        # Find the index where the rotation might have happened
        x = 0
        n = len(nums)
        for i in range(1, n):
            if nums[i - 1] > nums[i]:
                x = i	#감소하는 순간 index를 x로 체크
                break
        
        # Check if only one rotation point that splits into two sorted parts
        if x == 0:  # array is already sorted, not rotated
            return self.checkSorted(nums)
        
        # Check if both parts are sorted and confirm the overall order
        return self.checkSorted(nums[x:] + nums[:x])
  • 시간복잡도 : O(N)
  • 공간복잡도 : O(N)

 

더 깔끔한 풀이.

i = 1 부터 순회하면서 오름차순이 아닌 index 를 x에 할당하고, x 위치로부터 배열을 재조합해서 sorted array 인지 체크한다.

이미 오름차순 정렬된 배열이라면 x = 0 이다. 따라서 배열 재조합 필요없이 바로 sorted check

 

체크한 후 그 뒤 i+1을 체크하지않아도 되는게 어차피 처음으로 오름차순 정렬을 위반하는 x 에서 False가 반환되었다면 그 뒤 어떤 i 위치에서도 sorted 배열이 될 수 없기 때문에 중간에 break를 걸고 바로 sorted 를 체크하는 것이다.

 

Code

def check(self, nums: List[int]) -> bool:
        answer = False
        flag = True
        for i in range(len(nums)-1):
            if nums[i] > nums[i+1]:
                flag = False

        if (flag):
            return True      

        for x in range(1, len(nums)):
            b = list()
            for i in range(len(nums)):
                idx = (i+x) % len(nums)
                b.insert(idx, nums[i])
       
            flag = True
            for i in range(len(b)-1):
                if b[i] > b[i+1]:
                    flag = False
                    break
            if (flag):
                return True

        return answer

 

Complexity

Time Complexity

O(N^2)

 

Space Complexity

O(N)

728x90
저작자표시 비영리 변경금지 (새창열림)

'코딩 테스트' 카테고리의 다른 글

[LeetCode] 1800. Maximum Ascending Subarray Sum (Python)  (0) 2025.02.04
[LeetCode] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray (Python)  (0) 2025.02.03
[LeetCode] 637. Average of Levels in Binary Tree (Python)  (0) 2025.02.01
[LeetCode] 3151. Special array 1 (Python)  (1) 2025.02.01
[LeetCode] 66.Plus One (Python)  (0) 2025.01.31
'코딩 테스트' 카테고리의 다른 글
  • [LeetCode] 1800. Maximum Ascending Subarray Sum (Python)
  • [LeetCode] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray (Python)
  • [LeetCode] 637. Average of Levels in Binary Tree (Python)
  • [LeetCode] 3151. Special array 1 (Python)
zoodi
zoodi
IT/개발 관련 지식을 기록하는 블로그입니다.
  • zoodi
    오늘의 기록
    zoodi
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 후기
        • 컨퍼런스
        • 일상리뷰
      • 금융경제
        • 뉴스
        • 금융IT용어
        • 경제 및 부동산
      • 코딩 테스트
      • 스터디
        • JAVA
        • Kotlin
        • Spring
        • React, Nextjs
        • 인공지능 AI
        • Cloud & k8s
        • Kafka
        • Database
        • Network
        • Algorithm
        • Hadoop
        • LINUX
        • R Programming
        • 기타 (소공, 보안)
      • 도서
      • 기타
  • 블로그 메뉴

    • 홈
    • 스터디
    • 금융경제
    • 후기
    • 기타
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자료구조
    Kotlin
    Spring
    db
    알고리즘
    kafka
    springboot
    java
    이분탐색
    CodingTest
    스프링
    프로그래머스
    코딜리티
    MySQL
    Python
    C++
    금융용어
    코딩테스트
    코테
    쿠버네티스
    리트코드
    스프링부트
    네트워크
    코테공부
    pythoncodingtest
    codility
    LeetCode
    카카오코테
    자바
    코딩
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
zoodi
[LeetCode] 1752. Check if Array Is Sorted and Rotated (Python)
상단으로

티스토리툴바