본문 바로가기
TIL

[코테연습] 1752. Check if Array Is Sorted and Rotated

by 크라00 2025. 2. 2.

https://leetcode.com/problems/check-if-array-is-sorted-and-rotated/description/?source=submission-noac

 

문제타입:

  • 배열 문제: 주어진 배열이 정렬되어 있고 회전된 상태인지 확인하는 문제입니다.
  • 정렬 및 회전 문제: 배열이 비내림차순으로 정렬되어 있고, 한 번 회전된 형태인지 확인하는 문제입니다.

문제분석:

  1. 배열이 정렬되었는지 확인:
    • 배열이 비내림차순으로 정렬된 상태여야 합니다.
    • 회전된 경우, 하나의 위치에서만 감소가 발생해야 합니다.
  2. 회전된 배열 확인:
    • 배열에서 한 군데만 감소하는 부분(nums[i] > nums[i + 1])이 있어야 합니다.
    • 그 외의 부분은 모두 비내림차순으로 정렬되어야 합니다.
  3. 예외 처리:
    • 배열에 감소하는 부분이 2번 이상 발생하면 회전된 배열이 아니므로 false를 반환해야 합니다.
    • 감소가 한 번만 발생하거나 없으면 회전된 배열이 맞습니다.

문제풀이:

  1. 배열을 순회하면서 감소하는 부분을 찾기:
    • 배열을 처음부터 끝까지 순회하며 nums[i] > nums[(i + 1) % nums.length] 조건을 확인합니다.
    • 감소가 여러 번 나타나면 false를 반환합니다.
  2. 배열 끝과 처음을 비교:
    • nums[i] > nums[(i + 1) % nums.length]를 사용하여 배열의 끝과 처음도 비교할 수 있도록 합니다.
  3. 결과 반환:
    • 감소 부분이 1번 이하일 경우 true를 반환하고, 그 이상이면 false를 반환합니다.
public class Solution {
    public boolean check(int[] nums) {
        int count = 0; // 감소하는 부분의 개수를 셀 변수
        
        // 배열을 순회하면서 감소하는 부분을 찾음
        for (int i = 0; i < nums.length; i++) {
            // 현재 값(nums[i])이 다음 값(nums[(i + 1) % nums.length])보다 큰 경우
            if (nums[i] > nums[(i + 1) % nums.length]) {
                count++; // 감소 부분이 발견되면 count 증가
            }
        }

        // 감소하는 부분이 한 번 이하이면 회전된 정렬된 배열이므로 true 반환
        // 그렇지 않으면 false 반환
        return count <= 1;
    }
}