✔ Sum
문제 분석하기
각 행의 합, 각 열의 합, 양쪽 대각선의 합 총 4개의 합을 구하여 최대값을 구함
손으로 풀어보기
- 100 x 100 크기의 2차원 배열에 숫자를 저장
- i와 j를 증가시키면서 각 행의 합, 각 열의 합, 양쪽 대각선의 합을 구하여 최댓값과 비교 및 갱신
- 각 행의 합 = sum1[i][j]를 증가시키면서 각 행의 합을 구해 최댓값과 비교 및 갱신
- 각 열의 합 = sum2[j][i]를 증가시키면서 각 열의 합을 구해 최댓값과 비교 및 갱신
- 양쪽 대각선의 합 = sum3[i][i], sum4[i][99 - i]를 증가시키면서 값을 구해 최댓값과 비교 및 갱신
- 최댓값을 반환
슈도코드 작성하기
T(테스트 케이스 수) = 10
for(T만큼) {
t(테스트 번호)
arr(숫자 저장 2차원 배열 (100 x 100 만큼))
for(i -> 100만큼) {
for (j -> 100만큼) {
arr[i][j] = 입력 숫자 저장
}
}
max(최댓값)
sum1(각 행의 합), sum2(각 열의 합), sum3(대각선의 합), sum4(대각선의 합)
for(i -> 100만큼) {
sum1 = 0
sum2 = 0
sum3 += arr[i][i]
sum4 += arr[i][99 - i]
for(j -> 100만큼) {
sum1 += arr[i][j]
sum2 += arr[j][i]
}
최댓값과 각 행, 열의 합 비교 및 갱신
}
최댓값과 양쪽 대각선의 합 비교 및 갱신
#T와 최댓값 반환
}
코드 구현하기
/**
* 1209) Sum
*/
public class D001_1209 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// T(테스트 케이스 수) = 10
int T = 10;
// T만큼
for (int test_case = 1; test_case <= T; test_case++) {
// t(테스트 번호)
int t = sc.nextInt();
// arr(숫자 저장 2차원 배열 (100 x 100 만큼))
int[][] arr = new int[100][100];
// 입력 숫자 저장
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
arr[i][j] = sc.nextInt();
}
}
// max(최댓값)
int max = 0;
// sum1(각 행의 합), sum2(각 열의 합), sum3(대각선의 합), sum4(대각선의 합)
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
// 각 합 구하기
for (int i = 0; i < arr.length; i++) {
sum1 = 0;
sum2 = 0;
sum3 += arr[i][i];
sum4 += arr[i][99 - i];
for (int j = 0; j < arr.length; j++) {
sum1 += arr[i][j];
sum2 += arr[j][i];
}
// 최댓값과 각 행, 열의 합 비교 및 갱신
max = Math.max(max, sum1);
max = Math.max(max, sum2);
}
// 최댓값과 양쪽 대각선의 합 비교 및 갱신
max = Math.max(max, sum3);
max = Math.max(max, sum4);
// #T와 최댓값 반환
System.out.println("#" + t + " " + max);
}
}
}
'Coding Test > Java 알고리즘 실전' 카테고리의 다른 글
[1211] Ladder2 (0) | 2023.11.15 |
---|---|
[1210] Ladder1 (0) | 2023.11.15 |
[1208] Flatten (0) | 2023.11.13 |
[1206] View (0) | 2023.11.13 |
[1204] 최빈수 구하기 (0) | 2023.11.12 |