[Algorithm/인프런] 격자판 최대합

2023. 7. 11. 12:00Algorithm/JAVA

import java.util.Scanner;

public class testClass {

   public static void main(String[] args) {

 

      Scanner in=new Scanner(System.in);

 

      int num = in.nextInt();

      int [][]arr = new int[num][num];

      for(int i = 0 ; i < num; i++) {

         for(int j = 0 ; j < num; j++) {

            arr[i][j]=in.nextInt();

         }

       }

      solution(arr);

}

 

   public static void solution(int [][] num) {

 

   int lineMaxSum=0, rowMaxSum=0;

   int []lineSum = new int[num.length];

   int []rowSum = new int[num.length];

   int Dig1Sum=0, Dig2Sum = 0;

   int firstIndex = 0;

   int lastIndex = num.length-1;

 

   for(int i = 0 ; i < num.length; i++) {

      for(int j = 0 ; j <num.length; j++) {

   //행의 합

   lineSum[i] += num[i][j];

   rowSum[j] += num[i][j];

 

   //첫번째 대각선의 합. i == j인경우 sum

   if(i == j) {

      Dig1Sum +=num[i][j];

   }

   //두번째 대각선의 합. 2차원 배열의 firstIndex와 lastIndex를 지정함

  if(firstIndex == i && lastIndex == j) {

      Dig2Sum+=num[i][j];

      firstIndex++;

      lastIndex--;

   }

  }

}

 

   for(int i = 0 ; i < num.length; i ++) {

   //행의 최대값 구함

   if(lineSum[i] > lineMaxSum) {

      lineMaxSum = lineSum[i];

   }

   //열의 최대값 구함

   if(rowSum[i] > rowMaxSum) {

      rowMaxSum = rowSum[i];

   }

  }

 

  int maxNum = Math.max(lineMaxSum, rowMaxSum);

  maxNum = Math.max(maxNum, Dig1Sum);

  maxNum = Math.max(maxNum, Dig2Sum);

  System.out.println(maxNum);

  }

}