[알고리즘4] 2차원배열 주어진 좌표를 포함한 상하좌우 합이 최대인 좌표 찾기 문제
by 뱁새유니버스행렬의 크기를 입력받고 행렬의 값을 Random으로 0부터 100까지 주어서 임의의 2차원 배열을 만듭니다.
2차원 배열을 갖고 그 안에서 행렬 특정 좌표값을 포함한 상하좌우값의 합이 가장 큰 특정좌표를 구하는 문제인데요.
이번엔 코드 복잡성을 고려해 main 메서드뿐만 아니라 getSumAroundPoint메서드를 만들어 코드의 가독성과 재사용성을 높였습니다.
자세한 코드는 아래와 같습니다.
package algorithm;
import java.util.Random;
import java.util.Scanner;
public class Main {
// Scanner 객체를 이용해 사용자로부터 입력을 받습니다.
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
// 사용자로부터 행렬의 크기를 입력받습니다.
int a = sc.nextInt();
int b = sc.nextInt();
// 입력받은 크기로 2차원 배열을 초기화합니다.
int[][] arr = new int[a][b];
// 랜덤한 숫자를 생성하기 위해 Random 객체를 사용합니다.
Random random = new Random();
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
// 각 배열 원소에 0~99 사이의 랜덤한 숫자를 할당합니다.
arr[i][j] = random.nextInt(100);
// 현재 배열 원소의 값을 출력합니다.
System.out.print(arr[i][j] + " ");
}
// 한 행의 출력이 끝나면 줄바꿈을 합니다.
System.out.println();
}
// 최대 합을 찾기 위한 변수를 초기화합니다.
int maxSum = Integer.MIN_VALUE;
int maxRow = -1;
int maxCol = -1;
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
// 현재 좌표를 중심으로 상하좌우 및 자기 자신의 합을 계산합니다.
int currentSum = getSumAroundPoint(i, j, arr);
// 현재 합이 이전 최대 합보다 크다면 값을 갱신합니다.
if (currentSum > maxSum) {
maxSum = currentSum;
maxRow = i;
maxCol = j;
}
}
}
// 최대 합을 가진 좌표와 그 합을 출력합니다.
System.out.println("최대 합을 가진 좌표: (" + maxRow + ", " + maxCol + ")");
System.out.println("해당 좌표의 합: " + maxSum);
}
// 주어진 좌표를 중심으로 상하좌우 및 해당 좌표의 합을 반환하는 메서드입니다.
private static int getSumAroundPoint(int row, int col, int[][] arr) {
// 상하좌우 및 자기 자신의 좌표 변화량입니다.
int[] dr = {-1, 1, 0, 0, 0};
int[] dc = {0, 0, -1, 1, 0};
int sum = 0;
// 5가지 방향에 대해 반복합니다.
for (int i = 0; i < dr.length; i++) {
int newRow = row + dr[i];
int newCol = col + dc[i];
// 새로운 좌표가 배열 범위 내에 있을 경우만 합에 추가합니다.
if (newRow >= 0 && newRow < arr.length && newCol >= 0 && newCol < arr[0].length) {
sum += arr[newRow][newCol];
}
}
return sum;
}
}
결과값은 다음과 같습니다.
5X5 2차원 배열을 만들고 임의의 값들로 채워넣고 특정좌표 및 상하좌우 값의 합이 가장 큰 값을 찾습니다.
반응형
'IT' 카테고리의 다른 글
[알고리즘6] DAT 자료구조 이해하기 (0) | 2023.09.19 |
---|---|
자바 이클립스 디버깅 단축키 (0) | 2023.09.19 |
[알고리즘3] 상하좌우 찾기 문제 풀기 (0) | 2023.09.18 |
[알고리즘2] 주어진 배열의 짝수 세기 (0) | 2023.09.18 |
[알고리즘1]Java Eclipse IDE 알고리즘 구조 공부를 위한 기본 환경 설정 (0) | 2023.09.18 |
블로그의 정보
가슴이 웅장해지는 모든것
뱁새유니버스