1. 문제
N * N 배열에서 행의 합 ,열의 합, 두 대각선의 합 중에서 가장 큰 값을 출력하시오
2 - 1. 나의 풀이
쉽게 풀었다.
1. 행의 합, 최댓값 갱신 해주기
2. 열의 합, 최댓값 갱신 해주기
3. 두 대각선의 합, 최댓값 갱신 해주기
2 - 2. 나의 코드
import java.util.Scanner;
public class Array09 {
public static int solution(int[][] intArr, int n) {
int max=0;
int tmp=0;
for (int i = 0; i < n; i++) {
//행의 합
tmp=0;
for (int j = 0; j < n; j++) {
tmp += intArr[i][j];
}
if(tmp > max) max = tmp; //최댓값을 누적합 과정 이후 갱신 해주기
//열의 합
tmp=0;
for (int j = 0; j < n; j++) {
tmp += intArr[j][i];
}
if(tmp > max) max = tmp; //최댓값을 누적합 과정 이후 갱신 해주기
}
//대각선의 합
tmp=0; int tmp1=0;
for (int i = 0; i < n; i++) {
tmp += intArr[i][i];
tmp1 += intArr[i][n - i - 1];
}
//tmp와 tmp1 중 큰걸 tmp에 두고 tmp를 max와 비교
if(tmp < tmp1)tmp = tmp1;
if(tmp > max) max = tmp;
return max;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] intArr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
intArr[i][j] = sc.nextInt();
}
}
System.out.println(solution(intArr, n));
}
}
3 - 1. 강의 풀이
나와 같은 방식으로 풀었으나 코드가 더 간결하다.
누적합을 저장하는 변수를 두 개를 두어서 하나의 for문에서 누적합을 따로 저장했기 때문이다.
3 - 2. 강의 코드
package Algorythm_Array;
import java.util.*;
public class Array09_solution {
public static int solution(int[][] arr, int n) {
int max = Integer.MIN_VALUE; //최댓값을 구하므로 max를 가장 작은 값으로 초기화
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]; //열의 합
}
//최댓값 갱신
max = Math.max(max, sum1);
max = Math.max(max, sum2);
}
//두 대각선의 합
sum1 = sum2 = 0;
for (int i = 0; i < n; i++) {
sum1 += arr[i][i];
sum2 += arr[n - i - 1][i];
}
//최댓값 갱신
max = Math.max(max, sum1);
max = Math.max(max, sum2);
return max;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] arr = new int[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
arr[i][j] = sc.nextInt();
}
}
}
}
4. 얻어갈 점
1. sum1 = sum2 = 0; 처럼 두 변수를 같은 수로 동시에 초기화 가능
2. 하나의 for문에서 한 꺼번에 처리할 수 있는 방법이 있는지 생각해보자
3. Math.max() , min() 메서드 사용하기
4. import java.util.*; 편하다
'자바 알고리즘 문제풀이 > Array(1, 2차원 배열)' 카테고리의 다른 글
11. 임시반장 정하기 (2) | 2023.09.16 |
---|---|
10. 봉우리 (0) | 2023.09.14 |
8. 등수 구하기 (1) | 2023.09.11 |
7. 점수 계산 (0) | 2023.09.10 |
6. 뒤집은 소수 (0) | 2023.09.10 |