Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 정수 배열의 모든 0을 배열 끝으로 이동하는 방법

정수 배열에 포함된 모든 0을 배열의 끝으로 이동해야 하는 경우 MoveZeros 메서드를 활용할 수 있습니다. 핵심 아이디어는 배열을 한 번만 순회하면서 0이 아닌 요소들을 배열 앞쪽으로 차례대로 옮긴 뒤, 나머지 빈자리를 모두 0으로 채우는 것입니다.

알고리즘 동작 원리

  • 배열이 null이거나 길이가 0인 경우에는 별도의 처리 없이 즉시 반환합니다.
  • 배열을 순회하면서 0이 아닌 요소를 만나면 count 위치에 해당 값을 저장하고 count를 하나씩 증가시킵니다.
  • 순회가 끝난 후 count 인덱스부터 배열 끝까지의 모든 요소를 0으로 채웁니다.

최종 결과는 입력받은 nums 배열에 그대로 저장됩니다. 이 방식은 배열을 단 한 번만 순회하기 때문에 효율적이며, 별도의 추가 배열을 사용하지 않아 메모리 측면에서도 유리합니다.

시간 복잡도 – O(N)
공간 복잡도 – O(1)

예제 코드

public class Arrays {
    public void MoveZeros(int[] nums) {
        if (nums == null || nums.Length == 0) {
            return;
        }
        int count = 0;
        for (int i = 0; i < nums.Length; i++) {
            if (nums[i] != 0) {
                nums[count] = nums[i];
                count++;
            }
        }
        for (int i = count; i < nums.Length; i++) {
            nums[i] = 0;
        }
    }
}

class Program {
    static void Main(string[] args) {
        int[] nums = { 0, 1, 0, 3, 12 };
        Arrays arr = new Arrays();
        arr.MoveZeros(nums);
        Console.WriteLine("[" + string.Join(",", nums) + "]");
    }
}

출력 결과

[1,3,12,0,0]

위 예제처럼 입력 배열 {0, 1, 0, 3, 12}가 주어지면, 0이 아닌 값들인 1, 3, 12가 먼저 배치되고 그 뒤에 0 두 개가 이어져 최종적으로 [1, 3, 12, 0, 0]이 출력됩니다. 기존 요소들의 상대적인 순서는 유지됩니다.