본문 바로가기
알고리즘(Java)/Array

[알고리즘]Array(배열) 9. 격자판 최대합 - N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합 구하기

by snowballchoi 2021. 7. 24.

9. 격자판 최대합
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력하는 프로그램

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

 

 

import java.util.Scanner;

public class Main {
	
	public 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]; // 열의 합
			}
			// sum1, sum2 중에 큰 값 -> answer
			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) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		int[][] arr = new int[n][n]; // 2차원 배열
		for (int i=0; i<n; i++) {
			for (int j=0; j<n; j++) {
				arr[i][j] = scanner.nextInt();
			}
		}
		System.out.println(solution(n, arr));
	}

}

 

참고) 2차원 배열이 잘 들어갔는지 확인하는 방법(2차원 배열 출력)

// 1) 간단하게 출력하고 싶을 때
System.out.println(Arrays.deepToString(arr)); // 1차원 배열 출력은 Arrays.toString(arr)


// 2) 2차원 모양대로 출력하고 싶을 때
for (int i=0; i<n; i++) {
    for (int j=0; j<n; j++) {
    	System.out.print(arr[i][j] + " "); 
    }
    System.out.println();
}

결과

댓글