본문 바로가기
알고리즘/SWEA

[SWEA / Sum / JAVA]

by KDW999 2023. 5. 19.

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&contestProbId=AV13_BWKACUCFAYh&categoryId=AV13_BWKACUCFAYh&categoryType=CODE&problemTitle=&orderBy=RECOMMEND_COUNT&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=1 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제 접근

배열의 모든 행의 한 줄 합, 열의 한줄 합, 양 대각선 2개의 합 중 최대값을 구하는 문제다.

 

행과 열은 같은 반복문 내에서 i값은 한 줄 고정에 j값을 움직여서 합을 구했고

대각선은 위에서 아래로 내려오면서 합을 구하는 형태라 두 대각선의 행의 이동은 같고 열의 이동만 반대다.

두 대각선의 시작 인덱스를 서로 끝으로 잡고 증가, 감소 형태로 진행 후 최종적으로 최대값을 출력

 

 

++ 처음에 rMax, cMax없이 rcMax에 rSum, cSum의 최대값을 바로 넣었는데 이러면 rcMax에 더 큰 값이 있더라도

rSum, cSum 둘 중 큰 값이 들어가게 된다.

 

import java.util.*;
import java.io.*;

public class Solution {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		for(int t=1; t<=10; t++) {
			int tc = Integer.parseInt(br.readLine()); // 테케 번호
			
			int[][] arr = new int[100][100];
			
			for(int i=0; i<100; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for(int j=0; j<100; j++) {
					arr[i][j] = Integer.parseInt(st.nextToken());
				}
			}
			
            int rMax = 0;
			int cMax = 0;
			int rcMax = 0;
			for(int i=0; i<100; i++) {
				int rSum = 0;
				int cSum = 0;
				for(int j=0; j<100; j++) {
				    rSum += arr[i][j];
				    cSum += arr[j][i];
				}
				rMax = Math.max(rMax, rSum);
				cMax = Math.max(cMax, cSum);
			}
			rcMax = Math.max(rMax, cMax);
			
			int diag = 0;
			int rDiag = 99;
			
			int diagSum = 0;
			int rDiagSum = 0;
			
			int drMax = 0;
			for(int i=0; i<100; i++) {
				diagSum = arr[i][diag];
				rDiagSum = arr[i][rDiag];
				
				diag++;
				rDiag--;
			}
			drMax = Math.max(diagSum, rDiagSum);
			
			int max = Math.max(rcMax, drMax);
			
			System.out.println("#"+t+" "+max);
		}
	}
}

댓글