문제 접근
배열의 모든 행의 한 줄 합, 열의 한줄 합, 양 대각선 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);
}
}
}
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA / 부분 수열의 합 / JAVA] (0) | 2023.05.20 |
---|---|
[SWEA / 햄버거 다이어트 / JAVA] (0) | 2023.05.20 |
[SWEA / 회문1 / JAVA] (0) | 2023.05.18 |
[SWEA / 원재의 메모리 복구하기 / JAVA] (0) | 2023.05.17 |
[SWEA / 농작물 수확하기 / JAVA] (0) | 2023.05.17 |
댓글