CS/자료구조

배열 (Array)

리져니 2021. 7. 21. 18:20

같은 데이터형의 요소들이 동일한 크기로 순서를 가지고 나열되어 있는 메모리 공간으로, 각 원소는 번호(index)와 대응된다.

1차원 배열 구조

배열은 메모리의 연속된 위치에 구현된다. 첫번째 요소인 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

 

풀이

https://jianna.tistory.com/40

 

[2167] 2차원 배열의 합

문제 2차원 배열이 주어졌을 때 (i, j) 위치부터 (x, y) 위치까지에 저장되어 있는 수들의 합을 구하는 프로그램을 작성하시오. 배열의 (i, j) 위치는 i행 j열을 나타낸다. 입력 첫째 줄에 배열의 크기

jianna.tistory.com

 

728x90