# 격자판 최대합

최준호·2021년 8월 7일
0

알고리즘 강의

목록 보기
16/79

설명

5*5 격자판에 아래롸 같이 숫자가 적혀있습니다.

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

코드

public class GridPlate {
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int leng = in.nextInt();
        int[][] arr = new int[leng][];
        for(int i=0; i<leng; i++){
            int[] arr2 = new int[leng];
            for(int j=0; j<leng; j++){
                arr2[j] = in.nextInt();
            }
            arr[i] = arr2;
        }
        /*int[][] arr = {
                {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}
        };*/
        solution2(arr);
    }

    public static void solution(int[][] arr){
        int max = 0;
        int length = arr.length;
        //열 검사
        for(int i=0; i<length; i++){
            int sum = 0;
            for(int j=0; j<length; j++){
                int su = arr[i][j];
                sum += su;
            }
            max = Math.max(max, sum);
        }
        //행 검사
        for(int i=0; i<length; i++){
            int sum = 0;
            for(int j=0; j<length; j++){
                int su = arr[j][i];
                sum += su;
            }
            max = Math.max(max, sum);
        }
        //대각선 검사1
        int sum1 = 0;
        for(int i=0; i<length; i++){
            int su = arr[i][i];
            sum1 += su;
            max = Math.max(max, sum1);
        }

        //대각선 검사2
        int sum2 = 0;
        for(int i=length-1; i>=0; i--){
            int su = arr[i][i];
            sum2 += su;
            max = Math.max(max, sum2);
        }
        System.out.println(max);
    }

    public static void solution2(int[][] arr){
        int max = 0;
        int length = arr.length;
        int sum1, sum2;
        //행열 검사
        for(int i=0; i<length; i++){
            sum1 = 0;
            sum2 = 0;
            for(int j=0; j<length; j++){
                int su1 = arr[i][j];
                int su2 = arr[j][i];
                sum1 += su1;
                sum2 += su2;
            }
            max = Math.max(max, sum1);
            max = Math.max(max, sum2);
        }
        //대각선 검사1
        sum1=sum2 = 0;
        for(int i=0; i<length; i++){
            int su1 = arr[i][i];
            int su2 = arr[i][length-i-1];
            sum1 += su1;
            max = Math.max(max, sum1);
            max = Math.max(max, sum2);
        }
        System.out.println(max);
    }
}

2차원 배열을 모두 탐색할 수 있는지 확인하는 문제

처음에 문제를 풀었을 때 모든 검사를 하나씩 한다는 생각으로 풀었는데. 강의를 들으니 똑같은 반복문을 여러번 하는 것보다 한번의 반복문에서 같은 로직을 처리할 수 있는 있는 부분에서 처리하는게 더 좋은 코드였다.

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글