algorithm
격자판 최대합
juuuuuuun
2024. 5. 6. 17:08
설명
5*5 격자판에 아래롸 같이 숫자가 적혀있습니다.
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.
입력
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
출력
최대합을 출력합니다.
예시 입력 1
5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19
예시 출력 1
155
소스 코드 1
import java.util.Scanner;
public class Main {
public static int solution(int N, int[][] arr) {
int ans=-1;
int sum;
//행의 합
for (int i = 0; i < N; i++) {
sum = 0;
for (int j = 0; j < N; j++) {
sum += arr[i][j];
}
//합이 원래의 최대값보다 높다면 ans에 저장
if (ans < sum) {
ans = sum;
}
}
//열의 합
for (int i = 0; i < N; i++) {
sum = 0;
for (int j = 0; j < N; j++) {
sum += arr[j][i];
}
if (ans < sum) {
ans = sum;
}
}
//아래 대각선의 합
sum = 0;
for (int i = 0; i < N; i++) {
sum += arr[i][i];
}
if (ans < sum) {
ans = sum;
}
//위 대각선의 합
sum = 0;
for (int i = N-1; i >= 0; i--) {
sum += arr[i][N - 1 - i];
}
if (ans < sum) {
ans = sum;
}
return ans;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[][] arr = new int[N][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
arr[i][j] = sc.nextInt();
}
}
System.out.println(solution(N, arr));
}
}