오늘보다 더 나은 내일의 나에게_

자바 알고리즘 문제 풀이 Array Q09_격자판 최대합 본문

ALGORITHM/inflearn_javaAlgorithm

자바 알고리즘 문제 풀이 Array Q09_격자판 최대합

chan_96 2022. 2. 15. 22:04
728x90
설명

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
155

 

코드

해설 코드

import java.util.*;
class Main {	
	public 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;
	}

	public static void main(String[] args){
		Main T = new Main();
		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.print(T.solution(n, arr));
	}
}

 

 

풀이 및 정리 

먼저 각 행의 합, 각 열의 합, 대각선의 합을 구하는 방법을 알아야 문제를 풀 수 있다.
각 행의 합을 저장할 변수 2개 를 선언한다. 그리고 answer 변수에 최솟값인 Integer.MIN_VALUE 로 초기화시켜준다.

answer 변수와 각 행, 각 열의 합을 Math.max(arg1, arg2)로 비교해 더 큰 값을 answer에 저장시킨다.
반복문을 돌리고 난 후에는 각 행, 각 열의 합 중 최댓값이 answer에 대입된다.
728x90
Comments