개발놀이터

2-9 격자판 최대합 본문

기타/코딩테스트

2-9 격자판 최대합

마늘냄새폴폴 2023. 2. 14. 12:42

package 배열1차원2차원.격자판최대합2다시9.my;

import java.util.Scanner;

public class Main {

    /**
     * 너무 지저분하게 풀어버렸다... 시간도 이렇게 오래 걸리는 문제가 아닌거같은데 헛지거리를 했다는 생각..
     *
     */

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int num = kb.nextInt();
        int[][] arr = new int[num][num];

        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                arr[i][j] = kb.nextInt();
            }
        }

        System.out.println(solution(num, arr));
    }

    private static int solution(int num, int[][] arr) {
        int[] sumArray = new int[4];

        sumArray[0] = rowSum(num, arr);
        sumArray[1] = columnSum(num, arr);
        sumArray[2] = leftCrossSum(num, arr);
        sumArray[3] = rightCrossSum(num, arr);

        return finalSum(sumArray);
    }

    private static int finalSum(int[] sumArray) {
        int max = 0;
        for (int i = 0; i < 4; i++) {
            if (max < sumArray[i]) {
                max = sumArray[i];
            }
        }
        return max;
    }

    private static int rowSum(int num, int[][] arr) {
        int sum = 0, max = 0;
        for (int i = 0; i < num ; i++) {
            for (int j = 0; j < num; j++) {
                sum += arr[i][j];
            }
            if (max < sum) {
                max = sum;
            }
            sum = 0;
        }
        return max;
    }

    private static int columnSum(int num, int[][] arr) {
        int sum = 0, max = 0;
        for (int i = 0; i < num; i++) {
            for (int j = 0; j < num; j++) {
                sum += arr[j][i];
            }
            if (max < sum) {
                max = sum;
            }
            sum = 0;
        }
        return max;
    }

    private static int leftCrossSum(int num, int[][] arr) {
        int sum = 0;
        for (int i = 0; i < num; i++) {
            sum += arr[i][i];
        }
        return sum;
    }

    private static int rightCrossSum(int num, int[][] arr) {
        int sum = 0;
        for (int i = 0; i < num; i++) {
            int cnt = num - i - 1;
            sum += arr[cnt][i];
        }
        return sum;
    }
}

 

package 배열1차원2차원.격자판최대합2다시9.teacher;

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int[][] arr = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                arr[i][j] = kb.nextInt();
            }
        }
        System.out.println(solution(n, arr));
    }

    private static int solution(int n, int[][] arr) {
        int answer = Integer.MIN_VALUE;
        int sum1, sum2;
        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-11. 임시반장  (0) 2023.02.14
2-10. 봉우리  (0) 2023.02.14
2-8. 등수 구하기  (0) 2023.02.14
2-7. 점수 계산  (0) 2023.02.14
2-6. 뒤집은 소수  (0) 2023.02.14