문제
문제는 간단하다.
가로합, 세로합, 대각선의 합을 비교하여 가장 큰 합을 출력하는 것이다.
풀이
간단하게 생각해보기로 했다.
2중 for문을 이용해 가로합, 세로합, 대각선의 합을 구하는 코드를 작성하고 각 합의 최댓값을 저장한다.
가로합, 세로합, 대각선의 합을 배열에 넣어 최댓값을 비교한 후 출력한다.
위와 같이 생각을 하고 문제를 푸는데에 성공했지만, 소스가 불필요해 보이는게 많아 보인다.
package algolecture;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class Main21 {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
int size = scan.nextInt();
int[][] arr = new int[size][size];
int[] MAXWIDTH = new int[size];
int[] MAXHEIGHT = new int[size];
int[] MAXDAEGAK = new int[2];
for(int i=0;i<size;i++) {
for(int j=0;j<size;j++){
arr[i][j] = scan.nextInt();
}
}
// 가로합
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
//arr[0][0] + arr[0][1] + arr[0][2] + ...
MAXWIDTH[i] += arr[i][j];
}
}
for(int j=0;j<size;j++){
for(int i=0;i<size;i++){
MAXHEIGHT[j] += arr[i][j];
}
}
for(int i=0;i<size;i++){
for(int j=0;j<size;j++){
if(i == j){
MAXDAEGAK[0] += arr[i][j];
}
}
MAXDAEGAK[1] += arr[i][size-(i+1)];
}
Arrays.sort(MAXWIDTH);
Arrays.sort(MAXHEIGHT);
Arrays.sort(MAXDAEGAK);
int[] MAXMAX = new int[3];
MAXMAX[0] = MAXWIDTH[MAXWIDTH.length-1];
MAXMAX[1] = MAXHEIGHT[MAXHEIGHT.length-1];
MAXMAX[2] = MAXDAEGAK[MAXDAEGAK.length-1];
Arrays.sort(MAXMAX);
System.out.print(MAXMAX[MAXMAX.length-1]);
}
}
소스코드
package algolecture;
import java.util.Scanner;
public class Main21 {
public int solution(int n, int[][] arr){
int answer = Integer.MIN_VALUE;
int sum1, sum2;
//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];
}
answer = Math.max(answer, sum1);
answer = Math.max(answer, sum2);
}
sum1 = sum2 = 0;
// 2중 for문을 이용할 필요가 없다.
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){
Main21 T = new Main21();
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));
}
}
위의 코드는 내가 위에서 작성했던 코드처럼 배열을 따로 만들지 않았다. 훨씬 간편해 보인다.