0314 2차원 배열

Fifty·2025년 3월 14일

2. JAVA

목록 보기
4/33

2차원 배열

3x5 배열
0,0 0,1 0,2 0,3 0,4
1,0 1,1 1,2 1,3 1,4
2,0 2,1 2,2 2,3 2,4

int[][] arr = new int[3][5];

*[]: 첨자라고 부름

3x5 배열에 1로 채우기

		int[][] arr = new int[3][5];
		
		for(int i=0; i<3; i++) {
			for(int j=0; j<5; j++) {
				arr[i][j] = 1;
			}
		}
		for(int i=0; i<3; i++) {
			for(int j=0; j<5; j++) {
				System.out.print(arr[i][j]+" ");
			}
			System.out.println("");
		}

		int[][] arr = new int[3][5];
		System.out.println(arr);
		System.out.println(arr[0]);
		System.out.println(arr[1]);
		System.out.println(arr[2]);

2차원 배열의 주소

*arr @[[I@1f32e575  → ㅁㅁㅁ
             ㄴarr[0] @[I@279f2327 → ㅁㅁㅁㅁㅁ
              ㄴarr[1] @[I@2ff4acd0 → ㅁㅁㅁㅁㅁ
               ㄴarr[2] @[I@54bedef2 → ㅁㅁㅁㅁㅁ
 

[예제] 5x5 정수 행렬(board)
1. 프로그램 시작 시 자동으로 1이라는 숫자가 5곳에만 저장
*랜덤수로 좌표값을 찾아 돌린다.
2. 5x5배열에 1이 5개 숨어있다. 찾아라!
3. 행, 열 번호를 받아서 유무 확인 후 결과 출력
4. 5개를 다 찾으면 게임 종료
5. 결과 출력

  • 몇 번만에 찾았는지, 어느 공간에 숨어있었는지 위치값, 컴퓨터가 만든 배열 모양 출력
package ex01;

import java.util.*;

public class Test0314 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] board = new int[5][5];
		int[][] copy_board = new int[5][5];
		// 랜덤 입력 변수
		Random rd = new Random();
		int idx = 0;
		int row;
		int col;
		int cnt = 0;	// 맞은 개수
		// 사용자 입력 변수
		int inputRow;
		int inputCol;
		int inputCnt = 0;
		
		
		// board 행렬에 1을 5개 추가하기
		while(idx<5) {
			row = rd.nextInt(5);
			col = rd.nextInt(5);
			
			// 중복 제거
			if(board[row][col]==1) 
				continue;
			else {
				board[row][col] = 1;
				copy_board[row][col] = 1;
				idx++;
			}
		}
		
		System.out.println("5x5 행렬에 1이 5개 숨어있다. 찾아라!");
		
		
		/*
		// board 값 출력
		for(int i=0; i<5; i++) {
			for(int j=0; j<5; j++) {
				System.out.print(board[i][j]+" ");
			}
			System.out.println("");
		}
		*/
		
		
		Scanner sc = new Scanner(System.in);
		while(cnt<5) {
			System.out.println("행을 입력하세요");
			inputRow = sc.nextInt();
			System.out.println("열을 입력하세요");
			inputCol = sc.nextInt();
			inputCnt++;
			
			
			for(int i=0; i<5; i++) {
				for(int j=0; j<5; j++) {
					if(board[inputRow][inputCol]==1) {
						System.out.println("정답입니다.");
						cnt++;
						board[inputRow][inputCol]=0; // 맞추면 해당 값은 0으로 만들어야함.
					}else 
						continue;
					
				}
			}
		}
		
		System.out.println("*******************");
		System.out.println("종료합니다.");
		System.out.println("도전 횟수: " + inputCnt);
		
		System.out.println("---정답 BOARD---");
		// copy_board 값 출력
		for(int i=0; i<5; i++) {
			for(int j=0; j<5; j++) {
				System.out.print(copy_board[i][j]+" ");
			}
			System.out.println("");
		}
		System.out.println("-----------정답 위치값------------");
		// 위치 값 출력
		for(int i=0; i<5; i++) {
			for(int j=0; j<5; j++) {
				if(copy_board[i][j]==1)
					System.out.print("["+i+","+j+"]"+"  ");
			}
		}
		System.out.println("");
		System.out.println("-------------------------------");
		
	}
}

[예제]

5x5 배열에 아래와 같이 입력해라.
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25

package ex01;

public class Test0314_2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[][] arr = new int[5][5];
		int idx = 1;
		for(int i=0; i<5; i++) {
			if(i%2==0) {
				for(int j=0; j<5; j++) {
					arr[i][j] = idx;
					idx++;
				}
			}
			else {
				for(int j=4; j>=0; j--) {
					arr[i][j] = idx;
					idx++;
				}
			}
		}
		
		for(int i=0; i<5; i++) {
			for(int j=0; j<5; j++)
				System.out.print(arr[i][j]+" ");
			System.out.println("");
		}
	}
}

[예제] 4x4 배열에 성적관리

     국   영  수  총점

학생1 100 90 80 270
학생2 90 50 60 200
학생3 60 40 70 170
총 점 250 180 210 640

1번째 학생의 국0.0, 영0.1, 수0.2 점수 입력 받기 총점 계산 후 입력 0.3
2번째 학생의 국1.0, 영1.1, 수1.2 점수 입력 받기 총점 계산 후 입력 1.3
3번째 학생의 국2.0, 영2.1, 수2.2 점수 입력 받기 총점 계산 후 입력 2.3

총점 입력하기 국3.0, 영3.1, 수3.2 점수 합쳐서 총점 계산 후 입력 3.3

		Scanner sc = new Scanner(System.in);
		String[] subject = {"국어","영어","수학"};
		int[][] grr = new int[4][4];
		
		
		int grade;
		int sum=0;
		int total=0;
		
		for(int i=0; i<3; i++) {
			for(int j=0; j<3; j++) {
				System.out.println((i+1)+"번째 학생의 "+subject[j]+"점수를 입력하세요");
				grade = sc.nextInt();
				grr[i][j] = grade;
				sum+=grade;
			}
			grr[i][subject.length] = sum;
			total+=sum;
			sum=0;
		}
		grr[3][3]=total;
		
		int sum2=0;
		for(int i=0; i<student; i++) {
			for(int z=0; z<subject.length; z++) {
				sum2+=grr[z][i];
			}
			grr[student][i] = sum2;
			sum2=0;
		}
		
		
		// 배열 출력 확인
		for(int i=0; i<4; i++) {
			for(int j=0; j<4; j++) {
				System.out.print(grr[i][j]+" ");
			}
			System.out.println("");
		}

<변형> 학생수와 과목을 쉽게 변경하게 하기 위해 변수명을 사용했다.
학생 수는 별도로 받고, 과목은 subject에서 추가가 가능하다.

	// 성적관리 프로그램
		Scanner sc = new Scanner(System.in);
		System.out.println("학생 수를 입력하세요");
		int student = sc.nextInt();
		String[] subject = {"국어","영어","수학"};
		int[][] grr = new int[student+1][subject.length+1];
		
		
		int grade;
		int sum=0;
		int total=0;
		
		for(int i=0; i<student; i++) {
			for(int j=0; j<subject.length; j++) {
				System.out.println((i+1)+"번째 학생의 "+subject[j]+"점수를 입력하세요");
				grade = sc.nextInt();
				grr[i][j] = grade;
				sum+=grade;
			}
			grr[i][subject.length] = sum;
			total+=sum;
			sum=0;
		}
		grr[student][subject.length]=total;
		
		int sum2=0;
		for(int i=0; i<subject.length; i++) {
			for(int z=0; z<student; z++) {
				sum2+=grr[z][i];
			}
			grr[student][i] = sum2;
			sum2=0;
		}
		
		
		// 배열 출력 확인
		for(int i=0; i<student+1; i++) {
			for(int j=0; j<subject.length+1; j++) {
				System.out.print(grr[i][j]+" ");
			}
			System.out.println("");
		}

0개의 댓글