📝 꾸준함이 무기/Algorithm

[CT] 격자판 최대합

Cheri 2021. 5. 6. 13:48

5X5 격자판에서 각 행과 열의 합, 대각선의 합 중 가장 큰 수를 구하시오.

 

1. 내 문제풀이 방식

문제를 잘 못 이해하여서, 1~5열 1~5행을 전부다 구해야되는 지 모르고 문제의 그림대로의 행과 열만 구하였다.

function solution(arr){  
                let column = 0,
                row = 0,
                diagonal1 = 0,
                diagonal2 = 0;

                for(x of arr[1]){
                    row+=x
                }

                for(let y=0; y<arr.length; y++){
                    column+=arr[y][1];
                }

                for(let n=0; n<arr[0].length; n++){
                    diagonal1+=arr[n][n]
                }

                for(let i=0; i<arr[0].length; i++){
                    for(let j=arr[0].length-1; j>-1; j--){
                        if(i+j===4){
                        diagonal2+=arr[i][j]}
                    }
                }

                return Math.max(row,column,diagonal1,diagonal2);
            }

            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));

격자판이 5x5이니 i+j===4 라는 조건을 걸어서 대각선을 구하였다.

 

2. 인프런 문제풀이 방식

function solution(arr){  
                let answer=Number.MIN_SAFE_INTEGER;
                let n=arr.length;
                let sum1=sum2=0;
                for(let i=0; i<n; i++){
                    sum1=sum2=0;
                    for(let j=0; j<n; j++){
                        sum1+=arr[i][j];
                        sum2+=arr[j][i];
                    }
                    answer=Math.max(answer, sum1, sum2);
                }
                sum1=sum2=0;
                for(let i=0; i<n; i++){
                    sum1+=arr[i][i];
                    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));

sum1과 sum2을 0으로 초기화시켜주고, 각 열과 행의 합을 구한뒤 answer(최대합)을 갱신시켰다. 

똑같이 sum1과 sum2를 초기화하고, 각 대각선의 합을 구한뒤 갱신하였다.