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();
}
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();
}
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열 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(); // 줄 바꿈
} // 행 반복 끝
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;
}
사용자에게 행의 크기를 입력받고 그 수만큼의 반복을 통해 열의 크기도 받아 문자형 가변 배열을 선언 및 할당하세요. 그리고 각 인덱스에 '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();
}