티스토리 뷰
반응형
문제
5*5 격자판에 아래롸 같이 숫자가 적혀있습니다.
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.
입력
첫 줄에 자연수 N이 주어진다.(2<=N<=50)
출력
최대합을 출력합니다.
예시 입력
5
10 13 10 12 15
12 39 30 23 11
11 25 50 53 15
19 27 29 37 27
19 13 30 13 19
예시 출력
155
문제 풀이
[첫번째 풀이]
import java.util.Scanner;
public class Main {
public int solution(int count, int[][] n) {
int max = 0, sum = 0;
for (int i=0; i<count; i++) {
// 행
sum = 0;
for (int j=0; j<count; j++) sum += n[i][j];
if (max < sum) max = sum;
// 열
sum = 0;
for (int j=0; j<count; j++) sum += n[j][i];
if (max < sum) max = sum;
}
// 정대각선
sum = 0;
for (int i=0; i<count; i++) sum += n[i][i];
if (max < sum) max = sum;
// 반대각선
sum = 0;
for (int i=0; i<count; i++) {
sum += n[count - 1][i];
count--;
}
if (max < sum) max = sum;
return max;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
int[][] n = new int[count][count];
for (int i=0; i<count; i++) {
for (int j=0; j<count; j++) {
n[i][j] = scanner.nextInt();
}
}
Main main = new Main();
System.out.println(main.solution(count, n));
}
}
(Time 207ms / Memory 31MB)
[두번째 풀이]
import java.util.Scanner;
public class Main {
public int solution(int count, int[][] n) {
int max = 0, diagonal1 = 0, diagonal2 = 0;
int c = count;
for (int i=0; i<count; i++) {
int row = 0, column = 0;
for (int j=0; j<count; j++) {
row += n[i][j];
column += n[j][i];
}
if (max < row) max = row;
if (max < column) max = column;
diagonal1 += n[i][i];
diagonal2 += n[c - 1][i];
c--;
}
if (max < diagonal1) max = diagonal1;
if (max < diagonal2) max = diagonal2;
return max;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
int[][] n = new int[count][count];
for (int i=0; i<count; i++) {
for (int j=0; j<count; j++) {
n[i][j] = scanner.nextInt();
}
}
Main main = new Main();
System.out.println(main.solution(count, n));
}
}
(Time 210ms / Memory 31MB)
[세번째 풀이]
import java.util.*;
public class Main {
public int solution(int count, int[][] n) {
int max = 0, diagonal1 = 0, diagonal2 = 0;
int c = count;
for (int i=0; i<count; i++) {
int row = 0, column = 0;
for (int j=0; j<count; j++) {
row += n[i][j];
column += n[j][i];
}
max = Math.max(max, row);
max = Math.max(max, column);
diagonal1 += n[i][i];
diagonal2 += n[c - 1][i];
c--;
}
max = Math.max(max, diagonal1);
max = Math.max(max, diagonal2);
return max;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int count = scanner.nextInt();
int[][] n = new int[count][count];
for (int i=0; i<count; i++) {
for (int j=0; j<count; j++) {
n[i][j] = scanner.nextInt();
}
}
Main main = new Main();
System.out.println(main.solution(count, n));
}
}
(Time 237ms / Memory 31MB)
- 어떻게든 더 간단하게 풀 수 있는 방법이 없나 했는데 풀이 영상도 같은 방식으로 코드를 짜고 있었다. 다만 세번째 풀이의 다른 점은 최대값을 구할 때 Math.max()를 이용한다는 점이다.
반응형
'Java > Coding Test' 카테고리의 다른 글
[코딩테스트] 임시반장 정하기 (0) | 2022.03.11 |
---|---|
[코딩테스트] 봉우리 (0) | 2022.03.10 |
[코딩테스트] 등수구하기 (0) | 2022.03.10 |
[코딩테스트] 점수계산 (0) | 2022.03.08 |
[코딩테스트] 뒤집은 소수 (0) | 2022.03.08 |