다차원 배열

2021. 1. 5. 13:10·자바/기본적인 개념

1. 2차원 배열의 초기화

 

 

2. 2차원 배열에서의 length?

- 2차원 배열 변수가 참조하고 있는 곳이 행이기에, 행의 갯수가 나오게 된다.

(ex: arr.length)

 

- 열의 갯수는 해당 행의 길이를 가지고 쓰면 된다.

(ex: arr[0].length)

 

 

 

3. 2차원 배열의 길이를 이용하여 초기화하는 방법

 

 

 

4. 2차원 배열들을 향상된 for문을 통해서 합계 구하기.

 

 

5. 예제(1) - 좌표에 X 표하기.

import java.util.Scanner;

public class Exercise001 {	
	public static void main(String[] args) {
		final int SIZE = 10;
		int x = 0, y = 0;

		char[][] board = new char[SIZE][SIZE];
		board[0][0] = ' ';
		byte[][] shipBoard = {
		  //  1  2  3  4  5  6  7  8  9
			{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 1
			{ 1, 1, 1, 1, 0, 0, 1, 0, 0 }, // 2
			{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 3
			{ 0, 0, 0, 0, 0, 0, 1, 0, 0 }, // 4
			{ 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 5
			{ 1, 1, 0, 1, 0, 0, 0, 0, 0 }, // 6
			{ 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // 7
			{ 0, 0, 0, 1, 0, 0, 0, 0, 0 }, // 8
			{ 0, 0, 0, 0, 0, 1, 1, 1, 0 }, // 9
		};
		
		for(int i=0; i<SIZE; i++) {
			for(int j=0; j<SIZE; j++) {
				board[i][j] = ' ';
			}
		}

	     // 0행에 행번호를, 0열에 열번호를 저장한다. 
		for(int i=1;i<SIZE;i++)
			board[0][i] = board[i][0] = (char)(i+'0');

		Scanner scanner = new Scanner(System.in);

		while(true) {
			System.out.printf("좌표를 입력하세요.(종료는 00)>");
			String input = scanner.nextLine(); // 화면입력받은 내용을 tmp에 저장

			if(input.length()==2) {   // 두 글자를 입력한 경우
				x = input.charAt(0) - '0';  // 문자를 숫자로 변환
				y = input.charAt(1) - '0';

				if(x==0 && y==0) // x와 y가 모두 0인 경우 종료
					break; 
			} 
			
			if(input.length()!=2 || x <= 0 || x >= SIZE || y <= 0 || y >= SIZE){
				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
				continue;
			}

			// shipBoard[x-1][y-1]의 값이 1이면, 'O'을 board[x][y]에 저장한다.  
			board[x][y] = shipBoard[x-1][y-1]==1 ? 'o' : 'x';  
			
			// 배열 board의 내용을 화면에 출력한다.
			for(int i=0;i<SIZE;i++) {
				for(int j=0;j<SIZE;j++) {
					System.out.printf("%c", board[i][j]);
				}
				System.out.println();
			}
			System.out.println();
		}
	} // main의 끝
}

( 처음 2차원 char 배열을 ' ' 공백을 초기화한 후, 출력해야 한다. )

 

 

 

6. 예제(2) - 빙고판 만들어보기.

import java.util.Scanner;

public class Exercise001 {	
	public static void main(String[] args) {
		final int SIZE = 5;
		int x = 0 , y = 0;
		int num = 0;

		int[][] bingo = new int[SIZE][SIZE];
		Scanner scanner = new Scanner(System.in);

		// 배열의 모든 요소를 1부터 SIZE*SIZE까지의 숫자로 초기화
		for(int i=0;i<SIZE;i++) {
			for(int j=0;j<SIZE;j++) {
				bingo[i][j] = i*SIZE + j + 1;
			}
		}

		// 배열에 저장된 값을 뒤섞는다.(shuffle)
		for(int i=0;i<SIZE;i++) {
			for(int j=0;j<SIZE;j++) {
				x = (int)(Math.random() * SIZE);
				y = (int)(Math.random() * SIZE);

				// bingo[i][j]와 임의로 선택된 값(bingo[x][y])을 바꾼다.
				int tmp =  bingo[i][j];
				bingo[i][j] = bingo[x][y];
				bingo[x][y] = tmp;
			}
		}

		do {
			for(int i=0;i<SIZE;i++) {
				for(int j=0;j<SIZE;j++)
					System.out.printf("%2d ", bingo[i][j]);	
				System.out.println();
			}
			System.out.println();
		
			System.out.printf("1~%d의 숫자를 입력하세요.(종료:0)>", SIZE*SIZE);
			String tmp = scanner.nextLine(); // 화면에서 입력받은 내용을 tmp에 저장
			num = Integer.parseInt(tmp);     // 입력받은 문자열(tmp)를 숫자로 변환

			// 입력받은 숫자와 같은 숫자가 저장된 요소를 찾아서 0을 저장
			outer:
			for(int i=0;i<SIZE;i++) {
				for(int j=0;j<SIZE;j++) {
					if(bingo[i][j]==num) {
						bingo[i][j] = 0;
						break outer; // 2중 반복문을 벗어난다.
					}
				}
			}
		} while(num!=0); 
	} // main의 끝
}

 

 

 

7. 예제(3) - 행렬곱 구현해보기.

import java.util.Scanner;

public class Exercise001 {	
	public static void main(String[] args) {
		int[][] m1 = {
				{1, 2, 3},
				{4, 5, 6}
			};

			int[][] m2 = {
				{1, 2},
				{3, 4},
				{5, 6}
			};

			final int ROW    = m1.length;      // m1의 행길이
			final int COL    = m2[0].length;  // m2의 열길이
			final int M2_ROW = m2.length;	    // m2의 행길이

			int[][] m3 = new int[ROW][COL];

		   // 행렬곱 m1 x m2의 결과를 m3에 저장
			for(int i=0;i<ROW;i++)
				for(int j=0;j<COL;j++)
					for(int k=0;k<M2_ROW;k++)
						m3[i][j] += m1[i][k] * m2[k][j]; 

		   // 행렬 m3를 출력 
			for(int i=0;i<ROW;i++) {
				for(int j=0;j<COL;j++) {
					System.out.printf("%3d ", m3[i][j]);
				}
				System.out.println();
			}
	} // main의 끝
}

 

'자바 > 기본적인 개념' 카테고리의 다른 글

객체 배열  (0) 2021.01.06
가변 배열  (0) 2021.01.05
커맨드 라인을 통해 입력받기  (0) 2021.01.05
String 배열  (0) 2021.01.04
배열  (0) 2021.01.03
'자바/기본적인 개념' 카테고리의 다른 글
  • 객체 배열
  • 가변 배열
  • 커맨드 라인을 통해 입력받기
  • String 배열
백_곰
백_곰
  • 백_곰
    친절한 코딩
    백_곰
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘 (with JAVA)
        • 기본 알고리즘
        • 완전 탐색
        • 분할 정복 알고리즘
        • 동적 계획법
        • 탐욕법
        • 코딩 테스트 기출 문제
        • 코드트리 조별과제
      • 백준 (with JAVA)
        • 완전 탐색
        • 분할 정복
        • 그 외
      • 자바
        • 개발 환경 구축하기
        • 팁
        • 기본적인 개념
        • 컬렉션 프레임워크
        • 프로세스와 쓰레드
        • 지네릭스
        • 람다식
        • 스트림
        • 입출력 IO
        • 네트워킹
        • 열거형(enums)
        • java.lang 패키지
        • java.time 패키지
        • 유용한 클래스들
        • 형식화 클래스들
      • 안드로이드 with 자바
        • 응용 문제들
        • 자잘한 문제들
        • 오류 보고서
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      문자 기반 스트림
      ServerSocket
      java.time 패키지
      안드로이드 스튜디오
      코드트리
      outputstream
      소켓 프로그래밍
      스트림
      불안정 정렬
      자바 개념
      알고스팟
      제자리 정렬
      serializable
      람다식
      java.lang패키지
      코딩트리조별과제
      InputStream
      코딩테스트
      TCP 소켓 프로그래밍
      file
      Collections Framework
      유용한 클래스
      Arrays
      역직렬화
      map()
      snail
      다형성
      선택 정렬
      중간연산
      안정 정렬
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    백_곰
    다차원 배열
    상단으로

    티스토리툴바