개발놀이터
2-9 격자판 최대합 본문
package 배열1차원2차원.격자판최대합2다시9.my;
import java.util.Scanner;
public class Main {
/**
* 너무 지저분하게 풀어버렸다... 시간도 이렇게 오래 걸리는 문제가 아닌거같은데 헛지거리를 했다는 생각..
*
*/
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
int num = kb.nextInt();
int[][] arr = new int[num][num];
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
arr[i][j] = kb.nextInt();
}
}
System.out.println(solution(num, arr));
}
private static int solution(int num, int[][] arr) {
int[] sumArray = new int[4];
sumArray[0] = rowSum(num, arr);
sumArray[1] = columnSum(num, arr);
sumArray[2] = leftCrossSum(num, arr);
sumArray[3] = rightCrossSum(num, arr);
return finalSum(sumArray);
}
private static int finalSum(int[] sumArray) {
int max = 0;
for (int i = 0; i < 4; i++) {
if (max < sumArray[i]) {
max = sumArray[i];
}
}
return max;
}
private static int rowSum(int num, int[][] arr) {
int sum = 0, max = 0;
for (int i = 0; i < num ; i++) {
for (int j = 0; j < num; j++) {
sum += arr[i][j];
}
if (max < sum) {
max = sum;
}
sum = 0;
}
return max;
}
private static int columnSum(int num, int[][] arr) {
int sum = 0, max = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
sum += arr[j][i];
}
if (max < sum) {
max = sum;
}
sum = 0;
}
return max;
}
private static int leftCrossSum(int num, int[][] arr) {
int sum = 0;
for (int i = 0; i < num; i++) {
sum += arr[i][i];
}
return sum;
}
private static int rightCrossSum(int num, int[][] arr) {
int sum = 0;
for (int i = 0; i < num; i++) {
int cnt = num - i - 1;
sum += arr[cnt][i];
}
return sum;
}
}
package 배열1차원2차원.격자판최대합2다시9.teacher;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
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.println(solution(n, arr));
}
private 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];
}
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;
}
}
답은 맞았는데 너무 지저분하게 풀었다...
'기타 > 코딩테스트' 카테고리의 다른 글
2-11. 임시반장 (0) | 2023.02.14 |
---|---|
2-10. 봉우리 (0) | 2023.02.14 |
2-8. 등수 구하기 (0) | 2023.02.14 |
2-7. 점수 계산 (0) | 2023.02.14 |
2-6. 뒤집은 소수 (0) | 2023.02.14 |