본문 바로가기

STUDY/국비과정

[JAVA 웹 개발 공부] 국비지원 17일차 - 다차원 배열, 2차원 배열, binarySearch(), deepToString()

다차원 배열

 

*2차원 배열의 선언과 인덱스

int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.

 

 

2차원 배열의 index

 

2차원 배열은 행(row)과 열(column)로 구성되어 있기 때문에 index도 행과 열에 각각 하나씩 존재한다.

행의 index 범위는 '0 ~ (행의길이-1)' 이고, 열의 index 범위는 '0 ~ (열의길이-1)' 이다.

그리고 2차원 배열의 각 요소에 접근하는 방법은 '배열이름[행index][열index]'이다.

int[][] score = new int[4][3];     // 4행 3열 2차원 배열 score를 생성
score[0][0] = 100;                 // 배열 score의 1행 1열에 100을 저장
System.out.println(score[0][0]);   // 배열 score의 1행 1열의 값을 출력

 

 

2차원 배열 활용하기

 

*2차원 배열 이용해서 각 행에 2의 배수, 3의 배수, 4의 배수 출력하기

public class Main2 {
	public static void main(String[] args) {
		int[][] arr = new int[3][10];
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				arr[i][j] = (i + 2) * (j + 1);
			}
		}
		
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				System.out.print(arr[i][j] + " ");
 			}
			System.out.println();
		}
	}
}
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 
4 8 12 16 20 24 28 32 36 40

 

 

*2차원 배열의 각 행의 합을 구해서 출력하기

int[][] test = { { 12, 33, 34 }
               , { 43, 11, 45}
               , { 29, 34, 14 } };

// 위의 이차원 배열의 각 행의 합을 구해서 출력해보세요.
for (int i = 0; i < test.length; i++) {
    int sum = 0;
    for (int j = 0; j < test[i].length; j++) {
        sum += test[i][j];
    }
    System.out.println(i + "행의 합: " + sum);
}

 

 

배열의 검색 - binarySearch()

 

배열에 저장된 요소를 검색할 때는 binarySearch()를 사용한다.

binarySearch()는 배열에서 지정된 값이 저장된 위치(index)를 찾아서 반환하는데, 반드시 배열이 정렬된 상태이어야 올바른 결과를 얻는다. 그리고 만일 검색한 값과 일치하는 요소들이 여러 개 있다면, 이 중에서 어떤 것의 위치가 반환될지는 알 수 없다.

배열의 첫 번째 요소부터 순서대로 하나씩 검색하는 것을 '순차 검색(linear search)'이라고 하는데, 이 검색 방법은 배열이 정렬되어 있을 필요는 없지만 배열의 요소를 하나씩 비교하기 때문에 시간이 많이 걸린다. 

반면에 이진 검색(binary search)은 배열의 검색할 범위를 반복적으로 절반씩 줄여가면서 검색하기 때문에 검색속도가 상당히 빠르다. 배열의 길이가 10배가 늘어나도 검색 횟수는 3~4회 밖에 늘어나지 않으므로 큰 배열의 검색에 유리하다.

단, 배열이 정렬이 되어 있는 경우에만 사용할 수 있다는 단점이 있다. 

 

 

다차원 배열의 출력 - deepToString()

 

toString()배열의 모든 요소를 문자열로 편하게 출력할 수 있다.

toString()은 일차원 배열에만 사용할 수 있으므로, 다차원 배열에는 deepToString()을 사용해야 한다.

deepToString()은 배열의 모든 요소를 재귀적으로 접근해서 문자열을 구성하므로 2차원뿐만 아니라 3차원 이상의 배열에도 동작한다.

 

 

다차원 배열의 비교 - deepEquals()

 

equals()는 두 배열에 저장된 모든 요소를 비교해서 같으면 true, 다르면 false를 반환한다.

equals()도 일차원 배열에만 사용가능하므로, 다차원 배열의 비교에는 deepEquals()를 사용해야 한다.