C#에서 두 개의 정렬된 배열 병합하기
C#에서 두 개의 정렬된 배열을 하나로 합치는 작업은 List<T>를 활용하면 매우 간단하게 처리할 수 있습니다. 이 글에서는 두 배열의 요소를 번갈아 가며 새로운 배열로 병합하는 방법을 단계별로 살펴보겠습니다.
1단계: 두 개의 정렬된 배열 준비
먼저 병합할 두 개의 정렬된 배열을 선언합니다.
int[] array1 = { 1, 2 };
int[] array2 = { 3, 4 };2단계: 리스트에 요소를 추가하며 병합
두 배열의 요소를 List<int>에 번갈아 추가하여 하나의 리스트로 합칩니다.
var list = new List<int>();
for (int i = 0; i < array1.Length; i++) {
list.Add(array1[i]);
list.Add(array2[i]);
}
3단계: ToArray() 메서드로 다시 배열 변환
리스트를 배열로 되돌리려면 ToArray() 메서드를 사용하면 됩니다.
int[] array3 = list.ToArray();
전체 예제 코드
지금까지의 과정을 모두 포함한 완성된 코드는 다음과 같습니다.
using System;
using System.Collections.Generic;
public class Program {
public static void Main() {
int[] array1 = { 1, 2 };
int[] array2 = { 3, 4 };
var list = new List<int>();
for (int i = 0; i < array1.Length; i++) {
list.Add(array1[i]);
list.Add(array2[i]);
}
int[] array3 = list.ToArray();
foreach(int res in array3) {
Console.WriteLine(res);
}
}
}
실행 결과
1
3
2
4
위 코드는 두 배열의 요소를 같은 인덱스끼리 번갈아 배치하는 방식이므로, 결과가 1, 3, 2, 4 순서로 출력됩니다. 즉, 두 배열을 교차(interleave)하면서 병합하는 형태입니다.
참고: 정렬 상태를 유지하며 병합하기
병합된 결과 역시 오름차순으로 정렬된 상태를 유지하고 싶다면, LINQ의 Concat()과 OrderBy()를 함께 사용하는 것이 더 효율적입니다.
int[] merged = array1.Concat(array2).OrderBy(x => x).ToArray();
// 결과: 1 2 3 4
이처럼 상황에 따라 단순 교차 병합과 정렬 유지 병합 중 목적에 맞는 방법을 선택하면 됩니다.