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 |