Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

코딩 익숙해지기

[JAVA][SW Expert Academy] 1209. Sum 본문

알고리즘/SWEA

[JAVA][SW Expert Academy] 1209. Sum

minddi 2022. 8. 11. 20:28

 

 [SW Expert Academy] 1209. Sum

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV13_BWKACUCFAYh&categoryId=AV13_BWKACUCFAYh&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


 문제 내용

다음 100X100의 2차원 배열이 주어질 때, 각 행의 합, 각 열의 합, 각 대각선의 합 중 최댓값을 구하는 프로그램을 작성하여라.
다음과 같은 5X5 배열에서 최댓값은 29이다.


[제약 사항]
총 10개의 테스트 케이스가 주어진다.
배열의 크기는 100X100으로 동일하다.
각 행의 합은 integer 범위를 넘어가지 않는다.
동일한 최댓값이 있을 경우, 하나의 값만 출력한다.
 
[입력]
각 테스트 케이스의 첫 줄에는 테스트 케이스 번호가 주어지고 그 다음 줄부터는 2차원 배열의 각 행 값이 주어진다.

[출력]
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스의 답을 출력한다.
 

 해결 순서

1. 배열의 크기는 100 x 100 : 2차원 배열 각 행/열에 입력
2. 총 합 개수는 100 (가로 합 개수) + 100 (세로 합 개수) + 2 (대각선 합 개수)

3. 각 합 개수를 저장할 ArrayList 선언

4. 세로 합 # 0~99 : [i, j] + [i, j+1] + [i, j+2] + ... + [i, j+99]

5. 가로 합 # 100~199 : [99-j, i] + [99-(j+1), i] + [99-(j+2), i] + ... + [99-(j+99), i]

6. 대각선 합 # 200 : i == j 일 때 [i, j]

7. 대각선 합 # 201 : i + j == 99 일 때 [i, j]

8. 최댓값 max를 찾아 리턴

 

 

 문제 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.ArrayList;
import java.util.Scanner;
 
class Solution
{
    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T = 10;
        
        for(int test_case = 1; test_case <= T; test_case++)
        {
            int TC = sc.nextInt();
            int[][] arr = new int[100][100];
            ArrayList<Integer> arrListSum = new ArrayList<>();
            
            for (int i = 0; i < 100; i++) {
                for (int j = 0; j < 100; j++) {
                    arr[i][j] = sc.nextInt();
                }
            }
            
            // ArrayList 초기화
            for (int i = 0; i < 202; i++) {
                    arrListSum.add(i, 0);
            }
            
            for (int i = 0; i < 100; i++) {
                for (int j = 0; j < 100; j++) {
                    arrListSum.set(i, arrListSum.get(i) + arr[i][j]);                // 세로 합
                    arrListSum.set(i+100, arrListSum.get(i+100+ arr[99-j][i]);    // 가로 합
                    if (i == j) {                                                    // 대각선 합
                        arrListSum.set(200, arrListSum.get(200+ arr[i][j]);
                    } else if (i + j == 99) {                                        // 대각선 합
                        arrListSum.set(201, arrListSum.get(201+ arr[i][j]);
                    } else {
                        continue;
                    }
                }
            }
 
            int max = arrListSum.get(0);
            
            for (int i = 0; i < arrListSum.size(); i++) {
                if (arrListSum.get(i) >= max) {
                    max = arrListSum.get(i);
                }
            }
            
            System.out.println("#" + TC + " " + max);
        }
    }
}
cs