격자판 최대합

아기코딩단2·2022년 8월 8일
0

알고리즘

목록 보기
8/10

격자판 최대합
55 격자판에 아래롸 같이 숫자가 적혀있습니다.
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
N
N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합
니다.
▣ 입력설명
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는
다.
▣ 출력설명
최대합을 출력합니다.
▣ 입력예제 1
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
▣ 출력예제 1
155

<!--my solution-->

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과 - 섹션2 - 5 - 격자판 최대합</title>
    </head>
    <body>
        <script>
            function solution(arr) {
        // 주어지는 것 2차원 배열
        // 구해야하는 것 2차원 배열중 열, 행, 대각선 길이중 가장 큰 값을 구해야함 
        // 내가 모르는 것 2차원 배열 탐색
        // 문제는 이해 완료
        // 이중 for 문
        let answer = Number.MIN_SAFE_INTEGER;
        let n = arr.length;
        let sum1 = 0; //행의 합 저장
        let sum2 = 0; // 열의 합 저장

        for (let i = 0; i < n; i++) { // 행탐색 열탐색은 이중 for문
            sum1 = 0;
            sum2 = 0; // 여기서 초기화 해줘야함
            for(let j = 0; j < n; j++) {
                sum1 += arr[i][j]; // 처음0으로 고정됨 
                sum2 += arr[j][i]; // 뒤의 j 가 고정되서 돎
                }
                answer = Math.max(answer, sum1, sum2); // 가장 큰 값이 들어오게 됨
            }
            sum1 = 0; // 대각선 값을 구하기 위해서 재초기화
            sum2 = 0;

            for (let i = 0; i < n; i++) {
                sum1 += arr[i][i]; // 1 - 1 , 2 - 2 이렇게 더해줌
                sum2 += arr[i][n - i - 1]; // 끝에서 부터 더해주는 부분
            }
            answer = Math.max(answer, sum1, sum2);
            return answer;
        }
            let arr=[[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]];
            
            console.log(solution(arr));
        </script>
    </body>
</html>

정말 어려웠다 천천히 생각하면서 다시 풀어봐야겠다.

profile
레거시 학살자

0개의 댓글