java 2차원 배열을 활용한 문제풀이
1. 행렬 덧셈
문제 설명
크기가 N × M인 두 정수 행렬 A, B가 주어질 때, 두 행렬의 원소별 합을 구해 출력하세요.
입력 조건
- 첫째 줄: 정수
N,M(1 ≤ N, M ≤ 100) - 다음
N줄: 행렬 A의 원소M개 - 다음
N줄: 행렬 B의 원소M개 - 각 원소는 −100 이상 100 이하의 정수
java
// M*N 행열의 덧셈
private static void method1(Scanner sc) {
System.out.printf("형렬의 크기를 작성해주세요(M N): ");
int xAxisSize = sc.nextInt();
int yAxixSize = sc.nextInt();
int[][] matrix1 = makeRandomMatrix(xAxisSize, yAxixSize);
int[][] matrix2 = makeRandomMatrix(xAxisSize, yAxixSize);
int[][] sumMatrix = sumMatrix(matrix1, matrix2, xAxisSize, yAxixSize);
printMatirx(sumMatrix);
}
private static int[][] makeRandomMatrix(int xSize, int ySize) {
int[][] matrix = new int[xSize][ySize];
for (int i = 0; i < xSize; i++) {
for (int j = 0; j < ySize; j++) {
matrix[i][j] = ThreadLocalRandom.current().nextInt(-100, 101);
}
}
printMatirx(matrix);
return matrix;
}
private static int[][] sumMatrix(int[][] matrix1, int[][] matrix2, int xSize, int ySize) {
int[][] matrix3 = new int[xSize][ySize];
for(int i = 0; i < xSize; i++) {
for(int j = 0; j < ySize; j++) {
matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
return matrix3;
}2. 2차원 배열의 최댓값 찾기
문제 설명
N × M 크기의 2차원 배열이 주어질 때, 배열에 포함된 가장 큰 값과 그 값이 위치한 행 번호와 열 번호를 출력하세요.
입력 조건
- 행 번호와 열 번호는 1부터 시작합니다.
java
// 2차원 배열의 최댓값 찾기
private static void method2(Scanner sc) {
System.out.printf("형렬의 크기를 작성해주세요(M N): ");
int xAxisSize = sc.nextInt();
int yAxixSize = sc.nextInt();
int[][] matrix1 = makeRandomMatrix(xAxisSize, yAxixSize);
findBiggestNumberInMatix(matrix1);
}
// 위에서 입력받은 값을 직접 method에 넣었다면, 이번엔 임이의 matrix라고 할때,
// 사이즈 검증을 통해 for을 구현하는 방법 채택
private static void findBiggestNumberInMatix(int[][] matrix) {
// matrix 내에 [0][0]으로 값을 초기화하거나 변수의 최소값으로 초기화해 음수도 고려
int biggestNumber = Integer.MIN_VALUE;
int xAxisSize = matrix.length;
int yAxisSize = matrix[0].length;
for(int i=0; i < xAxisSize; i++) {
for(int j=0; j <yAxisSize; j++) {
if(biggestNumber < matrix[i][j]) biggestNumber = matrix[i][j];
}
}
System.out.println(biggestNumber);
}
private static int[][] makeRandomMatrix(int xSize, int ySize) {
int[][] matrix = new int[xSize][ySize];
for (int i = 0; i < xSize; i++) {
for (int j = 0; j < ySize; j++) {
matrix[i][j] = ThreadLocalRandom.current().nextInt(-1000, 1001);
}
}
printMatirx(matrix);
return matrix;
}
3. 색종이
문제 설명
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
입력 조건
- 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.