- μ§μ λ μ«μ(k)λ§νΌ arrayλ₯Ό μ€λ₯Έμͺ½μΌλ‘ νμ μν€λ©΄ λλ λ¬Έμ .
- k κ°μ΄ 0μ΄κ±°λ Nμ λ°°μμΈ κ²½μ° νμ ν νμκ° μμΌλ―λ‘ edge caseλ‘ μ²λ¦¬νλ€.
- in-placeλ‘ ν΄κ²°νμ§ μμλ λλ€λ©΄ μ¬μ€ arrayλ₯Ό νλ λ ν λΉν΄μ νμ μν¨ index λ§λ€ λ£μ΄μ£Όλ©΄ κ°λ¨νκ² ν΄κ²°λλ€.
- in-placeλ‘ νλ κ²μ΄ μ’ ν·κ°λ Έλλ° λ€μκ³Ό κ°μ΄ ν΄κ²°νλ€.
- (1) 첫λ²μ§Έ elementλ₯Ό μ΄λ μμΌμΌ λ element(prev)λ‘ μ μ₯νλ€.
- (2) λ€μ μ΄λ μμΉμ elementλ₯Ό μμλ‘ μ μ₯νκ³ prevλ₯Ό λ€μ μ΄λ μμΉλ‘ μ΄λνλ€.
- (3) μμ μ μ₯ν elementλ₯Ό λ€μ μ΄λ μμΌμΌ λ element(prev)λ‘ μ μ₯νλ€.
- (4) (2) ~ (3) κ³Όμ μ element κ°μλ§νΌ λ°λ³΅νλ€.
- λ¬Έμ λ μ΄λ κ² λ°λ³΅νλ€λ³΄λ©΄ κ²½μ°μ λ°λΌμλ μμμ μΌλ‘ λμμ€λ κ²½μ°κ° μλ€.
- μλ₯Ό λ€μ΄
|nums| = 6, k = 4
μΈ κ²½μ°λ₯Ό μκ°ν΄λ³΄λ©΄ μ΄λ μμΌμΌλ elementμ indexλ 0 β 4 β 2 β 0
μΌλ‘ λλμ μ€κ² λλ€.
- λ°λΌμ μμμ μ μ μ₯ (base) ν΄λκ³ μμμ μΌλ‘ λμμ¬ κ²½μ° λ°λ‘ κ·Έ λ€μ μμΉ (+1)λ₯Ό μλ‘μ΄ μμμ μΌλ‘ νλ€. κ·Έλ¦¬κ³ (2)~(3)μ κ³Όμ μ λκ°μ΄ λ°λ³΅νλ©΄ λλ€.
class Solution {
public:
void rotate(vector<int>& nums, int k) {
int N = nums.size();
if (k % N == 0) return;
int prev = nums[0];
int i = k % N;
int base = 0;
int count = 0;
while (count++ < N) {
int temp = nums[i];
nums[i] = prev;
prev = temp;
if (i == base) {
i = ++base;
prev = nums[i];
}
i = (i + k) % N;
}
}
};