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

C#으로 두 개의 정렬된 배열을 하나로 병합하는 방법

C#에서 두 개의 정렬된 배열을 하나의 배열로 합치는 작업은 배열을 다룰 때 자주 사용되는 기본 기법입니다. 이 글에서는 두 개의 정렬된 배열을 선언하고, 이를 하나의 새로운 배열에 순서대로 병합하는 방법을 단계별로 살펴보겠습니다.

1단계: 병합할 두 개의 배열 선언

먼저 병합하고자 하는 두 개의 정수형 배열을 선언합니다. 각 배열은 5개의 요소를 가지며, 오름차순으로 정렬되어 있습니다.

int[] arr1 = new int[5] { 5, 15, 25, 30, 47 };
int[] arr2 = new int[5] { 55, 60, 76, 83, 95 };

2단계: 결과를 저장할 세 번째 배열 생성

두 배열의 요소를 모두 담을 수 있도록, 크기가 10인 새로운 배열을 선언합니다. 병합 결과의 전체 길이는 두 배열 길이의 합과 같습니다.

int[] merged = new int[10];

전체 예제 코드

아래는 첫 번째 배열과 두 번째 배열을 차례대로 반복문을 통해 세 번째 배열에 복사하여 병합하는 완전한 C# 코드입니다.

using System;
using System.Collections.Generic;

class Program {
    static void Main() {
        int i = 0;
        int j = 0;

        int[] arr1 = new int[5] {
            5,
            15,
            25,
            30,
            47
        };
        int[] arr2 = new int[5] {
            55,
            60,
            76,
            83,
            95
        };
        int[] merged = new int[10];

        // 첫 번째 배열을 병합 배열에 복사
        for (i = 0, j = 0; i < 5; i++) {
            merged[j++] = arr1[i];
        }
        // 두 번째 배열을 병합 배열에 복사
        for (i = 0; i < 5; i++) {
            merged[j++] = arr2[i];
        }

        Console.WriteLine("Elements of merged array = ");
        for (i = 0; i < 10; i++) {
            Console.WriteLine("merged[" + (i) + "]: " + merged[i]);
        }
        Console.WriteLine();
    }
}

실행 결과

프로그램을 실행하면 두 배열이 하나로 합쳐진 결과를 확인할 수 있습니다.

Elements of merged array =
merged[0]: 5
merged[1]: 15
merged[2]: 25
merged[3]: 30
merged[4]: 47
merged[5]: 55
merged[6]: 60
merged[7]: 76
merged[8]: 83
merged[9]: 95

코드 동작 원리

이 프로그램의 핵심 로직은 다음과 같습니다.

첫 번째 반복문은 변수 ij를 함께 사용합니다. i는 원본 배열(arr1)의 인덱스를, j는 병합 배열(merged)의 인덱스를 가리키며, 후위 증가 연산자(j++)를 통해 값을 복사한 뒤 인덱스를 자동으로 증가시킵니다.

두 번째 반복문은 같은 방식으로 arr2의 요소들을 merged 배열의 뒤쪽에 이어서 복사합니다. 이때 j 값이 이미 5이므로, 두 번째 배열의 요소들은 인덱스 5부터 차례대로 저장됩니다.

두 배열이 모두 정렬된 상태이고 arr1의 최댓값(47)이 arr2의 최솟값(55)보다 작기 때문에, 단순히 이어 붙이기만 해도 최종 결과 배열 역시 정렬된 상태를 유지하게 됩니다.

참고: LINQ를 활용한 더 간결한 방법

C#에서는 LINQ의 Concat() 메서드를 사용하면 위 과정을 한 줄로 처리할 수도 있습니다.

int[] merged = arr1.Concat(arr2).ToArray();

이 방법은 코드가 간결하다는 장점이 있지만, 내부적으로 열거자를 거치므로 성능이 중요한 대용량 데이터 처리에는 직접 반복문으로 복사하는 방식이나 Array.Copy(), Buffer.BlockCopy() 등을 사용하는 것이 더 효율적일 수 있습니다.