본문으로 건너뛰기

배열: 다차원 배열

1차원 배열의 비교

두 개의 1차원 배열이 동일한 원소들을 포함하고 있는지 비교하는 방법은 여러 가지가 있다.

  1. 단순 검색을 이용한 비교: 첫 번째 배열의 모든 원소가 두 번째 배열에 존재하는지 확인하는 방법이다. 이 방법은 각 원소의 중복 개수를 정확히 확인하지 못하는 단점이 있다. 예를 들어, {1, 1, 2}{1, 2, 2}를 동일하다고 잘못 판단할 수 있다.
  2. 배열 복사 및 마킹을 이용한 비교: 두 번째 배열의 복사본을 만든다. 첫 번째 배열의 원소를 하나씩 가져와 복사본 배열에서 해당 원소를 찾는다. 원소를 찾으면 그 위치의 값을 -1과 같이 특수한 값으로 변경하여(마킹) 중복 검사를 피한다. 이 방법은 원소의 중복 개수까지 정확하게 비교할 수 있다.
  3. 정렬을 이용한 비교: 두 배열을 각각 정렬한 후, 같은 인덱스의 원소들을 순서대로 비교하는 방법이다. 만약 모든 원소가 일치하면 두 배열은 동일한 구성원을 가진다고 판단할 수 있다. 이 방법이 일반적으로 가장 효율적이다.

2차원 배열

**Multidimensional Array(다차원 배열)**는 배열의 배열로, 2차원 배열은 행(row)과 열(column)을 가진 테이블(표) 형태로 생각할 수 있다.

2차원 배열의 선언과 구조

2차원 배열은 다음과 같이 선언한다. int a[2][4];

  • 첫 번째 크기(2)는 행의 개수를 의미한다.
  • 두 번째 크기(4)는 열의 개수를 의미한다.
  • 각 원소는 a[행_인덱스][열_인덱스] 형태로 접근한다. 예를 들어, a[0][1]은 첫 번째 행, 두 번째 열의 원소를 가리킨다.

개념적으로 2차원 배열 a[3][5]에서 a[0], a[1], a[2]는 각각 하나의 1차원 배열(행)을 나타낸다.

2차원 배열의 활용

최소값 찾기

2차원 배열에서 최소값을 찾는 방법은 다음과 같다.

  1. 전체 순회: 중첩 for문을 사용하여 배열의 모든 원소를 하나씩 순회하며 최소값을 찾는다.
  2. 함수 활용: 최소값을 찾는 로직을 함수로 만들 수 있다.
    • 2차원 배열을 인자로 받는 함수: int findMin(int data[][10], int n)와 같이 함수를 정의할 수 있다. 이때, 함수의 매개변수로 다차원 배열을 전달할 경우, 첫 번째 차원의 크기는 생략할 수 있지만 나머지 차원의 크기는 반드시 명시해야 한다.
    • 1차원 배열 함수 재활용: 1차원 배열의 최소값을 구하는 함수 minOneArray()를 만든다. 그 후 2차원 배열을 한 행씩 순회하면서 이 함수를 각 행에 대해 호출하여 전체 최소값을 찾는다.

성적 처리 프로그램

2차원 배열은 학생들의 성적 데이터를 관리하는 데 유용하게 사용될 수 있다. 예를 들어 grade[학생수][과목수] 와 같이 배열을 선언하고, 각 행에는 학생 한 명의 여러 과목 성적을, 각 열에는 한 과목에 대한 모든 학생의 성적을 저장할 수 있다. 중첩 반복문을 이용해 각 학생의 성적 합계(행의 합)와 각 과목의 총점(열의 합)을 쉽게 계산할 수 있다.

문자열 배열 다루기

여러 개의 문자열을 관리하기 위해 2차원 문자 배열을 사용할 수 있다. 예를 들어, char str[3][30];는 최대 29자(+널 문자)의 문자열 3개를 저장할 수 있는 배열이다.

문자열 배열을 정렬할 때는 strcmp() 함수로 문자열을 비교하고, strcpy() 함수로 문자열의 위치를 교환(swap)하는 방식을 사용한다.