배열 회전
배열 왼쪽 회전 시각화
예시: [1,2,3,4,5]
를 왼쪽으로 2칸 회전
초기 상태
[1, 2, 3, 4, 5]
Step 1: reverse(arr, 0, 1)
- 처음 k개 뒤집기
[1, 2, 3, 4, 5]
↓ ↓
[2, 1, 3, 4, 5]
Step 2: reverse(arr, 2, 4)
- 나머지 뒤집기
[2, 1, 3, 4, 5]
↓ ↓ ↓
[2, 1, 5, 4, 3]
Step 3: reverse(arr, 0, 4)
- 전체 뒤집기
[2, 1, 5, 4, 3]
↓ ↓ ↓ ↓ ↓
[3, 4, 5, 1, 2] ✅ 완료!
왜 이렇게 동작하나?
패턴 발견
원본: [1, 2 | 3, 4, 5]
목표: [3, 4, 5 | 1, 2]
1. 앞부분 뒤집기: [2, 1 | 3, 4, 5]
2. 뒷부분 뒤집기: [2, 1 | 5, 4, 3]
3. 전체 뒤집기: [3, 4, 5 | 1, 2]
핵심 아이디어
두 그룹을 뒤집은 후 → 전체를 뒤집으면 → 그룹 순서가 바뀜!
다른 예시: k=3
[1, 2, 3, 4, 5, 6, 7]
Step 1: [3, 2, 1 | 4, 5, 6, 7]
Step 2: [3, 2, 1 | 7, 6, 5, 4]
Step 3: [4, 5, 6, 7 | 1, 2, 3] ✅
시간복잡도: O(n)
공간복잡도: O(1)