개념
배열은 같은 자료형의 원소를 연속된 메모리 공간에 저장하는 자료구조입니다. 생성할 때 크기를 정하고, 인덱스로 원소를 읽거나 수정합니다. 인덱스는 부터 시작합니다.
1차원 배열
선언과 초기화
- C++20: 함수 밖에
int a[5];처럼 자료형, 이름, 크기를 적어 전역 배열을 선언하면 모든 원소가 으로 초기화됩니다. 배열 크기에는 컴파일 시 정해지는 상수를 사용합니다. - Java 17:
int[] a = new int[n]으로 만들며 길이는a.length로 읽습니다. 정수 배열의 초기값은 입니다.
원소 접근과 수정
배열 a에 가 저장되어 있습니다. 각 칸 아래의 숫자는 인덱스입니다. a[0]은 첫 번째 원소인 이고, a[2]는 세 번째 원소인 입니다.
a[2] = 9를 실행하면 인덱스 에 저장된 값이 에서 로 바뀝니다.
시간·공간복잡도
길이가 인 배열을 기준으로 합니다.
| 구분 | 대상 | 복잡도 |
|---|---|---|
| 시간 | 원소 하나 읽기·수정 | |
| 공간 | 배열 전체 저장 |
2차원 배열
2차원 배열은 원소를 행과 열로 구분하여 저장합니다. a[i][j]에서 i는 행 인덱스, j는 열 인덱스입니다.
선언과 초기화
각 언어에서 모든 원소가 인 행 열 배열은 다음과 같이 준비합니다.
| 항목 | C++ | Java |
|---|---|---|
| 선언·초기화 | 함수 밖에 int a[2][3]; | int[][] a;로 선언한 뒤 a = new int[2][3];로 초기화 |
원소 접근과 수정
다음 배열은 행 열입니다. a[0][2]는 첫 번째 행의 세 번째 값인 이고, a[1][0]은 두 번째 행의 첫 번째 값인 입니다.
a[1][2] = 9를 실행하면 두 번째 행의 세 번째 원소가 에서 로 바뀝니다.
시간·공간복잡도
행 열 배열을 기준으로 합니다.
| 구분 | 대상 | 복잡도 |
|---|---|---|
| 시간 | 원소 하나 읽기·수정 | |
| 공간 | 배열 전체 저장 |
예제
문제
개의 수가 순서대로 주어진다. 첫 번째 수와 세 번째 수를 출력한 뒤, 세 번째 수를 로 바꾸고 바뀐 값을 출력하여라.
입력
첫째 줄에 보다 작은 양의 정수 개가 공백을 사이에 두고 주어진다.
출력
첫째 줄에 첫 번째 수, 둘째 줄에 변경 전 세 번째 수, 셋째 줄에 변경 후 세 번째 수를 출력한다.