2차원 배열 (23.04.26)

·2023년 4월 27일
0

Coding Test

목록 보기
9/39
post-thumbnail

✏️ 문제 1

3행 3열짜리 문자열 배열을 선언 및 할당하고
인덱스 0행 0열부터 2행 2열까지 차례대로 접근하여 "(0,0)"과 같은 형식으로
저장 후 출력하세요.
	// [실행 화면]
	// (0, 0)(0, 1)(0, 2)
	// (1, 0)(1, 1)(1, 2)
	// (2, 0)(2, 1)(2, 2)

(1) 풀이

	String[][] arr2 = new String[3][3];
		
	for(int row = 0; row < arr2.length; row++) {
		for(int col = 0; col <arr2[row].length; col++) {
			arr2[row][col] = "(" + row + ", " + col + ")"; // 값을 저장하는 과정이 필요함
            System.out.print(arr2[row][col]);
		}
		System.out.println();
	}

✏️ 문제 2

4행 4열짜리 정수형 배열을 선언 및 할당하고
1) 1 ~ 16까지 값을 차례대로 저장하세요.
2) 저장된 값들을 차례대로 출력하세요.

(1) 풀이

		int[][] arr = new int[4][4];
		int i = 1;
		
		for(int row = 0; row < arr.length; row++) {
			for(int col = 0; col < arr[row].length; col++) {
				
				arr[row][col] = i++;
				System.out.printf("%2d ", arr[row][col]);
			}
			System.out.println();
		}

✏️ 문제 3

4행 4열짜리 정수형 배열을 선언 및 할당하고
1) 1 ~ 16까지 값을 거꾸로 저장하세요.
2) 저장된 값들을 차례대로 출력하세요.

(1) 풀이

		int[][] arr = new int[4][4];
		int i = 16;
		
		for(int row = 0; row < arr.length; row++) {
			for(int col = 0; col < arr[row].length; col++) {
				
				arr[row][col] = i--;
				System.out.printf("%2d ", arr[row][col]);
			}
			System.out.println();
		}

✏️ 문제 4

4행 4열 2차원 배열을 생성하여 0행 0열부터 2행 2열까지는
1~10까지의 임의의 정수 값 저장 후 아래의 내용처럼 처리하세요.

(1) 내 풀이
풀다가 행 값들의 합과 열 값들의 합을 구하는 데에서 막혀서 결국 실패하였다.. :)

		int[][] arr = new int[4][4];

		int rowSum = 0; // 행 값들의 합
		int colSum = 0; // 열 값들의 합
		int sum = 0; // 총합
		
		for(int row = 0; row < arr.length; row++) {
			for(int col = 0; col < arr[row].length; col++) {
				int random = (int)(Math.random()*10 + 1); // 1~10 임의의 값 생성
			
				// 1) 0,1,2 행 / 0,1,2 열 -> 랜덤값
				if(row < 3 && col < 3) {
					arr[row][col] = random;
					System.out.printf("%2d ", arr[row][col]);
					
					// 2) 0행 3열, 1행 3열, 2행 3열 -> 행 값들의 합		
				} else if(col == 3 && row < 3) {
					arr[row][col] = rowSum;
					for(int i = 0; i < 3; i++) {
						rowSum += arr[i][3];
					}
					System.out.println(rowSum);
					
					// 3) 0행 0열, 1행 0열, 2행 0열 -> 열 값들의 합
				} else if(row == 3 && col < 3) {
					arr[row][col] = colSum;
					for(int i = 0; i < 3; i++) {
						colSum += arr[3][i];
					}
					System.out.println(colSum);
					
					// 4) 총합 (열 값들의 합)
				} else {
					for(int i = 0; i < 3; i++) {
						sum += arr[3][i];
					}
					System.out.println(sum);
				}
			}
		}

(2) 다른 풀이 - 상수 활용

		int[][] arr = new int[4][4];
		
		// 상수 사용법 : 변하지 않는 특정 값에 이름을 붙여 줌
		final int ROW_LAST_INDEX = arr.length - 1;// 행의 마지막 인덱스
		final int COL_LAST_INDEX = arr[0].length - 1; // 열의 마지막 인덱스
		
		for(int row = 0; row < arr.length; row++) { // 행 반복
							   // 행의 길이
			
			for(int col = 0; col < arr[row].length; col++) { // 열 반복
							  // row번째 행의 열의 길이
				
				// 마지막 행과 마지막 열이 아닌 경우
				if(row != ROW_LAST_INDEX && col != COL_LAST_INDEX) {
					
					int random = (int)(Math.random() * 10 + 1); // 1~10 사이 난수
					arr[row][col] = random;
					
					// 각 행의 마지막 열에 난수를 누적
					arr[row][COL_LAST_INDEX] += arr[row][col];
					
					// 각 열의 마지막 행에 난수를 누적
					arr[ROW_LAST_INDEX][col] += arr[row][col];
					
					// 생성된 모든 난수를 마지막 행, 마지막 열에 누적
					arr[ROW_LAST_INDEX][COL_LAST_INDEX] += arr[row][col];
				}
				
				System.out.printf("%4d", arr[row][col]);
			} // 열 반복 끝
			System.out.println(); // 줄 바꿈
			
		} // 행 반복 끝

✏️ 문제 5

2차원 배열의 행과 열의 크기를 사용자에게 직접 입력받되,
1~10 사이 숫자가 아니면 "반드시 1~10 사이의 정수를 입력해야 합니다." 출력 후
다시 정수를 받게 하세요.
크기가 정해진 이차원 배열 안에는 영어 대문자가 랜덤으로 들어가게 한 뒤 출력하세요.
(char형은 숫자를 더해서 문자를 표현할 수 있고 65는 A를 나타냄, 알파벳은 총 26글자)
행 크기 : 5
열 크기 : 4
T P M B
U I H S
Q M B H
H B I X
G F X I

(1) 내 풀이

		Scanner sc = new Scanner(System.in);
		
		int row = 0;
		int col = 0;
		
		while(true) {
			
			System.out.print("행 크기 : ");
			row = sc.nextInt();
			
			if(row >= 1 && row <= 10) {
				break;
			}
			System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다.");
		}
		
		while(true) {
			
			System.out.print("열 크기 : ");
			col = sc.nextInt();
			
			if(col >= 1 && col <= 10) {
				break;
			}
			System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다.");
		}
		
		char[][] arr = new char[row][col];
		
		for(row = 0; row < arr.length; row++) {
			for(col = 0; col <arr[row].length; col++) {
				
				int random = 'A' + (int)(Math.random()*25 + 1);
				arr[row][col] = (char)random;
				System.out.print(arr[row][col] + " ");
			}
			
			System.out.println();
		}

(2) 다른 풀이 - 더 간결한 코드 (while문 한 번만 사용)

		Scanner sc = new Scanner(System.in);
		
		while(true) {
			
			System.out.print("행 크기 : ");
			int row = sc.nextInt();
			
			System.out.print("열 크기 : ");
			int col = sc.nextInt();
			
			if(row < 1 || row > 10 || col < 1 || col > 10) { // 1~10 사이 숫자가 아닌 경우
				System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다.");
				
			} else {
				int[][] arr = new int[row][col];
				
				for(int i = 0; i < row; i++) {
					
					for(int j = 0; j < col; j++) {
						arr[i][j] = (int)(Math.random() * 26);
						
						char result = (char)(arr[i][j] + 65);
						System.out.print(result + " ");
					}
					System.out.println();
				}
				break;
			}

✏️ 문제 6

사용자에게 행의 크기를 입력받고 그 수만큼의 반복을 통해 열의 크기도 받아
문자형 가변 배열을 선언 및 할당하세요.
그리고 각 인덱스에 'a'부터 총 인덱스의 개수만큼
하나씩 늘려 저장하고 출력하세요.
행 크기 : 4
0열의 크기 : 2
1열의 크기 : 6
2열의 크기 : 3 
3열의 크기 : 5
a b
c d e f g h
i j k
l m n o p

(1) 풀이

		Scanner sc = new Scanner(System.in);
		
		System.out.print("행의 크기 : ");
		int input = sc.nextInt();
		
		char[][] arr = new char[input][];
		
		char result = 'a';
		
		// 열 크기 정하는 for문
		for(int i = 0; i < arr.length; i++) {
			System.out.print(i + "열의 크기 : ");
			int col = sc.nextInt();
			arr[i] = new char[col];
		}
		
		// 출력용 for문
		for(int row = 0; row < arr.length; row++) {
			
			for(int col = 0; col < arr[row].length; col++) {
				arr[row][col] = result++;
				System.out.print(arr[row][col] + " ");
			}
			System.out.println();
		}
profile
풀스택 개발자 기록집 📁

0개의 댓글