같은 데이터형의 요소들이 동일한 크기로 순서를 가지고 나열되어 있는 메모리 공간으로, 각 원소는 번호(index)와 대응된다.
배열은 메모리의 연속된 위치에 구현된다. 첫번째 요소인 arr[0]의 주소가 기본 주소가 되고, 다른 요소들의 주소는 다음과 같이 된다.
배열 요소 | 메모리 주소 |
arr[0] | base |
arr[1] | base +1 * sizeOf(int) |
arr[2] | base + 2 * sizeOf(int) |
arr[3] | base + 3 * sizeOf(int) |
arr[4] | base + 4 * sizeOf(int) |
* 예시에 int형 배열을 선언했기 때문에 sizeOf(int)를 더한다
(데이터 형에 따라 char: 1byte, int: 4byte, short: 2byte, long: 4byte 등등 으로 계산됨)
public class Main {
public static void main(String[] args) throws IOException {
int[] arr = {10,30,70,20,30}; // 1차원 배열 생성
// 1차원 배열 출력
for(int i=0;i<arr.length;i++){
System.out.printf("arr[%d]: %d%n", i, arr[i]);
}
}
}
실행 결과
2차원 배열
행(row)와 열(column)으로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재한다.
public class Main {
public static void main(String[] args) throws IOException {
// 2차원 배열 생성
int[][] arr = {
{10, 30, 70, 20, 30},
{40, 10, 30, 20, 50},
{20, 50, 10, 80, 60},
};
// 2차원 배열 출력
// i: 행 index, j: 열 index
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.printf("arr[%d][%d]: %d%n",i,j, arr[i][j]);
}
}
}
}
실행 결과
다차원 배열
2차원 이상의 배열을 의미. 메모리 용량이 허용하는 한 차원의 제한은 없다.
메모리 주소가 연속될 것을 요구하기 때문에 배열의 크기를 늘리는 것은 절대 불가능하며, 배열의 크기를 늘릴 필요가 있을 때에는 크기가 큰 새 배열을 만들고 기존 내용을 복사하거나, 배열의 일부를 연결 리스트 등으로 다른 곳과 연결하는 등의 방법이 쓰인다.
응용 문제
https://www.acmicpc.net/problem/2167
2167번: 2차원 배열의 합
첫째 줄에 배열의 크기 N, M(1 ≤ N, M ≤ 300)이 주어진다. 다음 N개의 줄에는 M개의 정수로 배열이 주어진다. 배열에 포함되어 있는 수는 절댓값이 10,000보다 작거나 같은 정수이다. 그 다음 줄에는
www.acmicpc.net
풀이
[2167] 2차원 배열의 합
문제 2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다. 입력 첫째 줄에 배열의 크기
jianna.tistory.com
'CS > 자료구조' 카테고리의 다른 글
해싱 (0) | 2021.07.24 |
---|---|
큐(Queue) (0) | 2021.07.22 |
리스트(List) - 원형 연결 리스트(Circular Linked List) (0) | 2021.07.22 |
리스트(List) - 이중 연결 리스트(Doubly Linked List) (0) | 2021.07.21 |
리스트 (List) - 연결리스트(LinkedList) (0) | 2021.07.21 |