(1209)(Sum) - s/w 문제 해결 기본 2일차

문제 이해

100X100의 2차원의 배열이 주어질 때, 각 행의 합 각 열의 합 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하시오

import java.util.Scanner;

public class Solution {
	static int testCase = 100;
		public static void main(String[] args) {
			Scanner stdIn = new Scanner(System.in);
			int [][]arr = new int[testCase][testCase];
			int i , j;
			
			for(int k = 0 ; k < 10; k++) {
				int temp = stdIn.nextInt();
				
				for(i=0; i < testCase; i++)
					for(j=0; j<testCase; j ++) {
						arr[i][j] = stdIn.nextInt();
					}
				
				int max = 0;
				int maxRow = arr[0][0];
				int maxCol = arr[0][0];
				int maxRdiagonal = 0;
				int maxLdiagonal = 0;
				
				// 행의 합 중 최댓값 구하기
				for(i=0; i < testCase; i++) {
					int row = 0;
					for(j=0;j < testCase; j++) {
						row += arr[i][j];
					}
					if(row > maxRow)
						 maxRow = row;
				}
				
				
				// 열의 합 중 최댓값 구하기
				for(j = 0 ; j < testCase; j++) {
					int col= 0;
					for(i = 0 ; i < testCase; i++) {
						col += arr[i][j];
					}
					if(col > maxCol)
						maxCol = col;
				}
				
				//행과 열 중 큰 값 비교
				if(maxCol - maxRow >= 0)
					max = maxCol;
					else max = maxRow;
				
				// 오른쪽 아래 대각선 구하기
				for(i = 0; i<testCase; i++) {
					maxRdiagonal += arr[i][i];	
				}
				
				// max와 비교하기
				if(maxRdiagonal - max >= 0)
					max = maxRdiagonal;
				
				// 왼쪽 아래 대각선 구하기
				for(i= 0; i< testCase; i++) {
					maxLdiagonal += arr[testCase-1-i][i];
				}
				
				//max와 비교하기
				if(maxLdiagonal - max >= 0)
					max = maxLdiagonal;
				
				System.out.println("#"+temp+" " +max);
			}
	}
}

참고자료

소프트웨어 아카데미 S/W Problem Solving

배열 정렬 참고자료

https://defacto-standard.tistory.com/18

0%