본문 바로가기
HackerRank

Rotate

by Doromi 2023. 10. 5.
728x90
반응형

주어진 배열 nums를 k번 오른쪽으로 회전하는 함수인 Rotate를 구현


이 함수는 배열을 인플레이스로 수정하여 회전된 배열을 생성합니다.

여기서 사용된 주요 변수 및 루프의 동작을 설명하겠습니다:

s: 회전된 서브 배열의 시작 인덱스를 나타냅니다. 초기값은 0입니다.

p: 현재 위치를 나타내는 인덱스 변수입니다. 초기값은 0으로 시작합니다.

e: 이동 중에 값을 임시로 저장하기 위한 변수입니다. 초기값은 배열의 첫 번째 요소 nums[0]입니다.

for 루프: 배열의 모든 요소를 순환하기 위한 루프입니다. c 변수는 현재 루프 반복 횟수를 나타냅니다.

루프 내부에서 다음 작업을 수행합니다:

p를 p + k로 업데이트하여 배열을 k만큼 오른쪽으로 이동시킵니다. 이때 % nums.Length를 사용하여 배열의 범위를 벗어나지 않도록 합니다.

(e, nums[p]) = (nums[p], e)를 사용하여 e와 nums[p] 값을 서로 교환합니다. 이를 통해 값을 이동시킵니다.

p가 s와 같아지면, 서브 배열의 끝까지 이동한 것이므로 s를 증가시키고 p를 초기화하며, 새로운 e 값을 설정합니다.

이러한 루프를 통해 배열이 k번 오른쪽으로 회전됩니다. 회전된 배열은 주어진 배열 nums에 직접 적용됩니다.

 

using System;

public class Program
{
    public static void Main()
    {
        int[] nums = { -1, -100, 3, 99 };
        int k = 2;

        Rotate(nums, k);

        Console.WriteLine("Rotated Array:");
        foreach (int num in nums)
        {
            Console.Write(num + " ");
        }
    }

    public static void Rotate(int[] nums, int k)
    {
        if (k == 0 || nums.Length == 1 || nums.Length == k)
            return;

        int s = 0;
        int p = 0;
        int e = nums[p];

        for (int c = 1; c <= nums.Length; c++)
        {
            p = (p + k) % nums.Length;
            (e, nums[p]) = (nums[p], e);

            if (p == s)
            {
                s++;
                p++;
                e = nums[p];
            }
        }
    }
}
728x90
반응형

'HackerRank' 카테고리의 다른 글

Binary Search Tree : Insertion  (1) 2023.10.06
Tree: Level Order Traversal  (0) 2023.10.05
lego blocks  (0) 2023.10.05
Tree : Top View  (0) 2023.10.05
Tree: Height of a Binary Tree  (0) 2023.10.04