본문으로 바로가기
반응형

 

 

 

지난 포스팅에서 자바의 배열에 대해서 다뤘습니다.

 

 

이번 포스팅에선 배열의 연장선2차원 배열에 대해서 다루고자 합니다.

 

 

 

2차원이라고 해서 복잡하게 생각이 들 수도 있는데, 크게 어렵지 않습니다.

 

 

 

 

 

 

2차원 배열이란

 

자료형이 같은 1차원 배열의 묶음으로 배열 안에 다른 배열 존재로,
2차원 배열은 할당된 공간마다 인덱스 번호 두 개 부여합니다.
(앞 번호는 행, 뒷 번호는 열 ([0][0]) )

 

 

 

 

 

 

 

 

 

 

그림으로 보면 위와 같습니다.

 

일반적인 행 열 이라고 생각하시면 편합니다.

 

 

맨 처음 시작하는 원소의 인덱스 값은 a[0][0] 입니다.

 

배열처럼 행이나 열 모두 0부터 시작한다고 가정합니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

2차원 배열의 선언과 할당입니다.

 

1차원 배열과 크게 다를 거 없이 인덱스 저장이 하나 더 추가된 겁니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

배열의 구조입니다.

 

기존 배열과 크게 다를 것은 없지만, 한 가지 주시해야 하는 것이 있습니다.

 

2차원 배열의 각 인덱스(행)의 주소가 다른 걸 볼 수 있습니다.

 

이 부분만 숙지하고 있으면 됩니다.

 

 

 

 

 

 

 

 

 

2차원 배열의 원소 값을 초기화하는 방법은 위와 같이 다양합니다.

 

기존의 1차원 배열과 비슷한 방법이긴 하나,

 

각 행에 접근하여 , 또 행의 원소마다 접근해야 하니 이중 for문이 자주 쓰입니다.

 

 

 

 

 

 

 

 

 

그럼 2차원 배열의 예제를 살펴봅시다.

 

 

 

 

 

 

 

 


2차원 배열 예제


 

 

 

난이도 ★

 

 

 

예제 1

 

 

Q : 다음의 정수 배열이 있다.
           37, 92, 58, 46, 94, 29, 25, 58
   
    위 배열에서 짝수에 해당하는 값과 홀수에 해당하는 값을 별도의 짝수 값만 저장하는 짝수 배열
    홀수 값만 저장하는 홀수 배열로 분리하여 저장하도록 한다.
  

 

 

 

 

 

 


 

 

 

 

public static void ex1() {
		int arr[] = new int[] {37, 92, 58, 46, 94, 29, 25, 58};
		int odd[] = new int[0];  
		int even[] = new int[0];
		
		for(int i=0; i<arr.length; i++) {
			if(arr[i] % 2 == 0) {
				int evenCopy[] = new int[even.length + 1];
				System.arraycopy(even, 0, evenCopy, 0, even.length);
				even = evenCopy;
				even[even.length - 1] = arr[i];
			}else {
				int oddCopy[] = new int[odd.length + 1];
				System.arraycopy(odd, 0, oddCopy, 0, odd.length);
				odd = oddCopy;
				odd[odd.length - 1] = arr[i];
			}
		}
		
		System.out.println(Arrays.toString(even));
		System.out.println(Arrays.toString(odd));
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 

 

 

 

난이도 ★

 

 

 

예제 2

 

 

Q : 다음의 정수 배열이 있다.
         37, 92, 58, 46, 94, 29, 25, 58
   
     위 배열에서 가장 큰 값과 가장 작은 값만을 분리하여 별도의 배열에 저장하도록 한다.

  

 

 

 

 

 

 


 

 

 

 

public static void ex1() {
		int arr[] = new int[] {37, 92, 58, 46, 94, 29, 25, 58};
		int max = arr[0];
		int min = arr[0];
		for(int i=0; i<arr.length; i++) {
			if(arr[i] > max) 	max = arr[i];
			if(arr[i] < min)    min = arr[i];
			
		}
	
		int num[] = {max,min};
		
		System.out.println(Arrays.toString(num));
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 





 

난이도 ★

 

 

 

예제 3

 

 

Q : 다음의 정수 배열이 있다.
       37, 92, 58, 46, 94, 29, 25, 58
   
      위 배열에서 짝수에 해당하는 값과 홀수에 해당하는 값을 별도의 짝수 값만 저장하는 짝수 배열
      홀수 값만 저장하는 홀수 배열로 분리하여 저장하도록 한다.(정적 배열)

  

 

 

 

 

 

 


 

 

 

 

public static void ex1() {
		int[] arr = new int[] {7,92,58,46,94,29,25,58};
		int[][] arrEvenOdd = new int[2][8];
		int evenCount=0, oddCount=0; 
		
		for(int i=0; i<arr.length; i++) {
			if(arr[i] % 2 ==0) {
				arrEvenOdd[0][evenCount++] = arr[i];
			}else {
				arrEvenOdd[1][oddCount++] = arr[i];				
			}
		}

		for(int i=0; i<arrEvenOdd.length; i++) {
			System.out.println(Arrays.toString(arrEvenOdd[i]));
		}
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 









 

난이도 ★

 

 

 

예제 4

 

 

Q : 다음의 정수 배열이 있다.
         37, 92, 58, 46, 94, 29, 25, 58
   
     위 배열에서 가장 큰 값과 가장 작은 값만을 분리하여 별도의 배열에 저장하도록 한다.

     (2차원 배열 형식)

 

 

 

 

 

 


 

 

 

 

public static void ex1() {
		int[] arr = new int[] {7,92,58,46,94,29,25,58};
		int[][] arrEvenOdd = new int[2][];

		// arrEvenOdd[0] : 짝수 저장
		// arrEvenOdd[1] : 홀수 저장
		int arrEven[] = new int[0];
		int arrOdd[] = new int[0];
		
		
		for(int i=0; i<arr.length; i++) {
			if(arr[i] % 2 ==0) {
				int arrEvenCopy[] = new int[arrEven.length + 1];
				System.arraycopy(arrEven, 0, arrEvenCopy, 0, arrEven.length);
				arrEven = arrEvenCopy;
				arrEven[arrEven.length - 1] = arr[i];
			}else {
				int arrOddCopy[] = new int[arrOdd.length + 1];
				System.arraycopy(arrOdd, 0, arrOddCopy, 0, arrOdd.length);
				arrOdd = arrOddCopy;
				arrOdd[arrOdd.length - 1] = arr[i];
			}
		}
		
		arrEvenOdd[0] = arrEven;
		arrEvenOdd[1] = arrOdd;

		
		System.out.println(Arrays.deepToString(arrEvenOdd));
	}
    
 public static void main(String[] args) {
		ex1();
	}

 

 

 


 





 



이상 java의 2차원 배열을 마치겠습니다.

 

 

 

 

 

 

다음 포스팅에선 java의 객체에 대해 다뤄보고자 합니다.



반응형