배열(Array)은 여러 개의 데이터를 하나의 변수 이름으로 묶어 관리할 수 있는 기본적인 자료 구조입니다. C#에서 배열은 메모리상에 연속된(Contiguous) 공간에 할당되며, 인덱스를 사용해 각 요소에 빠르게 접근할 수 있다는 것이 가장 큰 특징입니다.
이 글에서는 C# 배열의 대표적인 활용 예제 세 가지를 소개합니다.
1. 정렬된 세 개의 배열에서 공통 요소 찾기
세 개의 정렬된 배열에서 모두 존재하는 공통 요소를 효율적으로 찾는 방법입니다. 세 개의 포인터(i, j, k)를 두고 각 배열을 동시에 순회하며 값을 비교합니다. 값이 서로 같으면 공통 요소이므로 출력하고, 그렇지 않으면 더 작은 값을 가진 배열의 포인터만 앞으로 이동시키는 방식입니다.
이 알고리즘은 이중·삼중 반복문을 사용하는 방식보다 훨씬 효율적이며, 시간 복잡도는 O(n1 + n2 + n3)입니다.
using System;
class Demo {
static void commonElements(int []one, int []two, int []three) {
int i = 0, j = 0, k = 0;
while (i < one.Length && j < two.Length && k < three.Length) {
if (one[i] == two[j] && two[j] == three[k]) {
Console.Write(one[i] + " ");
i++;j++;k++;
}
else if (one[i] < two[j])
i++;
else if (two[j] < three[k])
j++;
else
k++;
}
}
public static void Main() {
int []one = {20, 35, 57, 70};
int []two = {9, 35, 57, 70, 92};
int []three = {25, 35, 55, 57, 67, 70};
Console.Write("Common elements: ");
commonElements(one, two, three);
}
}2. ArrayList를 활용한 동적 배열 생성
C#의 일반 배열은 크기를 미리 지정해야 하지만, ArrayList를 사용하면 요소를 자유롭게 추가하며 크기가 자동으로 늘어나는 동적 배열을 만들 수 있습니다. 아래 예제에서는 Add() 메서드로 요소를 추가하고, Count 속성으로 현재 요소 개수를 확인한 뒤 foreach 문으로 전체 목록을 출력합니다.
using System;
using System.Collections;
namespace CollectionApplication {
class Program {
static void Main(string[] args) {
ArrayList al = new ArrayList();
al.Add(99);
al.Add(47);
al.Add(64);
Console.WriteLine("Count: {0}", al.Count);
Console.Write("List: ");
foreach (int i in al) {
Console.Write(i + " ");
}
Console.WriteLine();
Console.ReadKey();
}
}
}3. 가변 배열(Jagged Array) 선언과 요소 접근
가변 배열(Jagged Array)은 '배열의 배열'로, 각 행마다 서로 다른 길이의 배열을 가질 수 있는 2차원 배열 형태입니다. 아래 예제에서는 좌표(points) 데이터를 가변 배열로 선언하고, 중첩 for 문으로 모든 요소를 출력한 후 특정 위치의 요소에 접근하는 방법을 보여줍니다.
using System;
namespace ArrayApplication {
class MyArray {
static void Main(string[] args) {
int[][] points = new int[][]{new int[]{10,5},new int[]{30,40}, new int[]{70,80},new int[]{ 60, 70 }};
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0}][{1}] = {2}", i, j, points[i][j]);
}
}
// access
int x = points[0][1];
Console.WriteLine(x);
Console.ReadKey();
}
}
}마무리
지금까지 C# 배열의 대표적인 활용 사례를 살펴보았습니다. 고정 크기의 데이터 집합에는 일반 배열을, 크기가 유동적인 경우에는 ArrayList나 List<T>를, 행마다 길이가 다른 데이터에는 가변 배열을 사용하는 것이 좋습니다. 상황에 맞는 배열 유형을 선택하면 코드의 가독성과 성능을 모두 높일 수 있습니다.