CodeGym /행동 /C# SELF /C#에서 1차원 배열의 기본 연산

C#에서 1차원 배열의 기본 연산

C# SELF
레벨 7 , 레슨 3
사용 가능

1. 소개

배열로 보통 뭘 하고 싶어?

기본적인 연산들을 한번 쭉 적어보자:

  • 인덱스로 배열 요소 읽기와 수정하기.
  • 값으로 요소 찾기.
  • 배열 복사, "슬라이스"(배열의 일부) 만들기.
  • 배열 정렬하기.
  • 배열 뒤집기(Reverse).
  • 배열을 값으로 채우기.
  • 요소가 있는지 확인(배열에 특정 값이 있는지).
  • 길이 변경(resize).

실제 문제 풀 때 이런 거 자주 만나 — 예를 들어, “합계가 4000 이상인 게 있냐?”, “1000 이하인 첫 번째 가격 찾아줘”, “가격을 오름차순으로 정렬해줘” 이런 거 말이지.

이런 거 다 함수로 할 수 있어

연산 메서드 / 문법 특징
인덱스로 수정
arr[n] = x
범위 벗어나면 에러
값 찾기
Array.IndexOf(arr, v)
못 찾으면 -1
존재 확인
Array.Exists(arr, pred)
람다나 함수 써야 함
정렬
Array.Sort(arr)
배열이 바로 바뀜
뒤집기
Array.Reverse(arr)
요소 순서 바뀜
복사
arr.Clone(), Array.Copy
얕은 복사
채우기
Array.Fill(arr, val)
한 값으로 다 채움
크기 변경
Array.Resize(ref arr, len)
새 요소는 default
최대/최소 찾기
arr.Max(), arr.Min()
Linq 필요함

2. 인덱스로 요소 읽기와 수정

이건 이미 해봤겠지만, 간단한 예제로 다시 한번 확인해보자(예를 들어, 점수 배열이 있다고 치자):

// 학생 점수 배열
int[] grades = { 4, 3, 5, 2, 5 };

// 첫 번째 점수 읽기
int firstGrade = grades[0];
Console.WriteLine($"첫 번째 점수: {firstGrade}");

// 마지막 점수를 "최고"(5)로 바꾸기
grades[^1] = 5;
Console.WriteLine("수정된 마지막 점수: " + grades[^1]);
인덱스로 배열 요소 읽기와 수정하기

여기서 중요한 건: 인덱스는 0부터 시작하고, 없는 인덱스에 접근하면 IndexOutOfRangeException 에러가 나 — 면접에서도 자주 물어보고, 실전에서도 자주 나오는 실수야.

3. 배열에서 요소 찾기

배열에서 요소를 찾아서 인덱스를 반환해주는 함수가 두 개 있어.

Array.IndexOf(value [, from]) 함수

Array.IndexOf 함수는 배열의 처음부터 원하는 요소를 찾아. 찾으면 그 인덱스를 반환하고, 못 찾으면 -1을 반환해.

근데 만약 배열에 같은 값이 여러 번 있으면, 다음 위치도 찾고 싶을 수 있잖아? 그럴 땐 Array.IndexOf 함수에 두 번째 파라미터로 시작 인덱스를 넘겨주면 돼. 이건 마지막으로 찾은 인덱스 + 1이야.

배열에서 2라는 숫자가 어디 있는지 전부 찾아보자:

int[] grades = { 4, 3, 5, 2, 5, 2 };
int x = 2; // 찾을 요소

int index = Array.IndexOf(grades, x);
while (index != -1)
{
    Console.WriteLine($"요소 {x}는 위치: {index}에서 찾았어");
    // 다음 인덱스는 index + 1부터 다시 찾기
    index = Array.IndexOf(grades, x, index + 1);
} 
Array.IndexOf로 모든 요소 찾기

Array.LastIndexOf(value [, from]) 함수

Array.LastIndexOf 함수는 배열의 끝에서부터 원하는 요소를 찾아. 찾으면 인덱스를 반환하고, 못 찾으면 -1을 반환해. 나머지는 Array.IndexOf랑 똑같아.

이번엔 2라는 숫자를 끝에서부터 전부 찾아보자:

int[] grades = { 4, 3, 5, 2, 5, 2 };
int x = 2; // 찾을 요소

int index = Array.LastIndexOf(grades, x);
while (index != -1)
{
    Console.WriteLine($"요소 {x}는 위치: {index}에서 찾았어");
    // 다음 인덱스는 이전 위치 - 1부터 다시 찾기
    index = Array.LastIndexOf(grades, x, index - 1);
}
Array.LastIndexOf로 끝에서부터 모든 요소 찾기

4. 배열에 요소가 있는지 확인

배열에 특정 값이 있는지 확인하려면 Contains 함수를 써. 이 메서드는 배열에 그 값이 있으면 true를 반환해. 이걸 쓰려면 System.Linq 모듈을 꼭 추가해야 해. 예시:

using System.Linq; // using System.Linq; 꼭 추가해

bool hasExcellent = grades.Contains(5); 
Console.WriteLine($"5점이 있냐? {hasExcellent}");
Contains로 배열에 값이 있는지 확인하기

진짜 간단하고 깔끔하지.

5. 배열 뒤집기: Array.Reverse

배열을 “거꾸로” 뒤집고 싶을 때가 있지. 이럴 땐 이렇게 써:

int[] grades = { 2, 3, 4, 5 };

// 배열 뒤집기
Array.Reverse(grades);
Console.WriteLine("뒤집은 점수: " + string.Join(", ", grades));
Array.Reverse로 배열 뒤집기

최신 데이터부터 보고 싶을 때나, 그냥 세상을 거꾸로 보고 싶을 때(?) 유용해.

6. 배열 정렬: Array.Sort

언젠가 배열을 정렬하고 싶을 때가 올 거야. 제일 쉽고 안전한 방법은 표준 정렬 함수 쓰는 거야:

int[] grades = { 4, 3, 5, 2, 5 };
// 오름차순 정렬
Array.Sort(grades);
Console.WriteLine("정렬된 점수: " + string.Join(", ", grades));
Array.Sort로 오름차순 정렬

이 함수는 문자열도 정렬하는데, 그땐 알파벳 순서야.

내림차순 정렬

기본 Array.Sort는 오름차순만 돼. 내림차순으로 하려면 정렬하고 뒤집으면 돼:

Array.Sort(grades); // 먼저 오름차순
Array.Reverse(grades); // 그다음 뒤집기
Console.WriteLine("내림차순: " + string.Join(", ", grades));
내림차순 정렬: Sort + Reverse

참고: 정렬하면 배열이 “바로” 바뀌는 거라 원본이 없어져. 원래 순서가 필요하면 먼저 복사해둬.

7. 배열 복제: CloneArray.Copy

원본 배열을 건드리지 않고 복사본을 만들고 싶으면 Clone()이나 Array.Copy()를 써.

Clone()은 배열에서 바로 호출하면 전체 복사본을 반환해.

Array.Copy()는 파라미터가 필요해:

  • 원본 배열;
  • 복사할 배열;
  • 몇 개 복사할지.
int[] original = { 1, 2, 3, 4, 5 };

// 방법 1: Clone()
// 1차원, 다차원 배열 모두 되고, 반환 타입이 object라서 형변환 필요:
int[] copy1 = (int[]) original.Clone();

// 방법 2: Array.Copy
int[] copy2 = new int[original.Length];
Array.Copy(original, copy2, original.Length);
배열 복제: Clone()Array.Copy()

중요한 점: 배열이 int, double 같은 기본 타입이면 값이 복사돼. 근데 객체 배열이면 참조만 복사돼! (이걸 “얕은 복사”라고 해)

8. 배열을 값으로 채우기: Array.Fill

배열을 “0”으로 초기화하거나 전부 5로 채우고 싶을 때 Array.Fill이 딱이야:

int[] grades = new int[5];
Array.Fill(grades, 5); // 이제 모든 요소가 5야
Console.WriteLine("가상의 완벽한 학생: " + string.Join(", ", grades));
Array.Fill로 배열을 값으로 채우기

특정 값으로 배열을 빠르게 초기화할 때 유용해.

9. 최대값과 최소값 찾기

System.Linq 모듈 덕분에 배열에 쓸 수 있는 좋은 메서드가 많아졌는데, 그중 Max()Min()은 배열에서 최대/최소값을 바로 찾아줘.

배열에서 최고점, 최저점 찾아보자:

int maxGrade = grades.Max();
int minGrade = grades.Min();
Console.WriteLine($"최고 점수: {maxGrade}, 최저 점수: {minGrade}");
배열에서 최대값과 최소값 찾기

이 메서드 쓰려면 using System.Linq; 꼭 추가해.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION