본문 바로가기
Java/Coding-Test

[Java] 2-9 격자판 최대합

by JS1111 2022. 1. 18.

문제

N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.

입력
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
출력
최대합을 출력합니다.
예시 입력

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

예시 출력

155

출처
인프런 - 자바-알고리즘-문제풀이-코테대비

내 풀이

private static int getMaxSum(int num, int[][] nums) {
    int[] sumOfRow = new int[num]; // 행
    int[] sumOfCol = new int[num]; // 열
    int[] sumOfDia = new int[2];   // 대각선

    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            sumOfRow[i] += nums[i][j];
            sumOfCol[j] += nums[i][j];
            if (i == j) sumOfDia[0] += nums[i][j];
            if (i + j == num - 1) sumOfDia[1] += nums[i][j];
        }
    }

    return Stream.of(sumOfRow, sumOfCol, sumOfDia)
            .flatMapToInt(Arrays::stream)
            .max()
            .orElse(0);
}

줄마다 값을 저장했다가 한 번에 최대값을 찾는다

다른 풀이

public static int solution(int n, int[][] arr) {
    int answer = -2147000000;
    int sum1 = 0, sum2 = 0;
    for (int i = 0; i < n; i++) {
        sum1 = sum2 = 0;
        for (int j = 0; j < n; j++) {
            sum1 += arr[i][j];
            sum2 += arr[j][i];
        }
        answer = Math.max(answer, sum1);
        answer = Math.max(answer, sum2);
    }
    sum1 = sum2 = 0;
    for (int i = 0; i < n; i++) {
        sum1 += arr[i][i];
        sum2 += arr[i][n - i - 1];
    }
    answer = Math.max(answer, sum1);
    answer = Math.max(answer, sum2);

    return answer;
}

합을 저장하지 않고 한 줄마다 최대값을 확인한다

기억할 점

2차원 배열 선언

// 선언
int[][] array; // 주로 사용
int array[][];
int[] array[];

// 선언과 초기화
int[][] array = new int[4][3]; // 기본값으로 초기화

// 가변배열, 행마다 다른길이
int[][] array = new int[2][];
array[0] = new int[2];
array[1] = new int[3];

// 선언과 초기화2
// 배열의 크기는 자동으로 계산
int[][] array = new int[][] {
    {1, 2},
    {3, 4, 5},
};

// 선언과 초기화3
// new int[][] 생략가능
int[][] array = { 
    {1, 2},
    {},     // 빈 배열, 길이가 0
    {3, 4, 5},
}

//괄호 안의 마지막 요소 쉼표가능
{{1, 2}} == {{1, 2,},}

// 2차원 배열 값 확인
System.out.println(Arrays.deepToString(array));

'Java > Coding-Test' 카테고리의 다른 글

[Java] 2-11 임시반장 정하기  (0) 2022.01.18
[Java] 2-10 봉우리  (0) 2022.01.18
[Java] 2-5 소수(에라토스테네스 체)  (0) 2022.01.18
[Java] 2-4 피보나치 수열  (0) 2022.01.17
[Java] 1-12 암호  (0) 2022.01.16

댓글