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
코드 동작 원리
이 프로그램의 핵심 로직은 다음과 같습니다.
첫 번째 반복문은 변수 i와 j를 함께 사용합니다. 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() 등을 사용하는 것이 더 효율적일 수 있습니다.