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));
    }
}