문제타입:
- 배열 문제: 주어진 배열이 정렬되어 있고 회전된 상태인지 확인하는 문제입니다.
- 정렬 및 회전 문제: 배열이 비내림차순으로 정렬되어 있고, 한 번 회전된 형태인지 확인하는 문제입니다.
문제분석:
- 배열이 정렬되었는지 확인:
- 배열이 비내림차순으로 정렬된 상태여야 합니다.
- 회전된 경우, 하나의 위치에서만 감소가 발생해야 합니다.
- 회전된 배열 확인:
- 배열에서 한 군데만 감소하는 부분(nums[i] > nums[i + 1])이 있어야 합니다.
- 그 외의 부분은 모두 비내림차순으로 정렬되어야 합니다.
- 예외 처리:
- 배열에 감소하는 부분이 2번 이상 발생하면 회전된 배열이 아니므로 false를 반환해야 합니다.
- 감소가 한 번만 발생하거나 없으면 회전된 배열이 맞습니다.
문제풀이:
- 배열을 순회하면서 감소하는 부분을 찾기:
- 배열을 처음부터 끝까지 순회하며 nums[i] > nums[(i + 1) % nums.length] 조건을 확인합니다.
- 감소가 여러 번 나타나면 false를 반환합니다.
- 배열 끝과 처음을 비교:
- nums[i] > nums[(i + 1) % nums.length]를 사용하여 배열의 끝과 처음도 비교할 수 있도록 합니다.
- 결과 반환:
- 감소 부분이 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;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 1790. Check if One String Swap Can Make Strings Equal (1) | 2025.02.05 |
---|---|
[코테연습] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray (0) | 2025.02.03 |
[코테연습] 3151. Special Array I (1) | 2025.02.01 |
[코테연습] 디스크 컨트롤러 (0) | 2025.01.31 |
[코테연습] 자물쇠와 열쇠 (1) | 2025.01.30 |