2021/12/29) 6. 격자판 최대합 [1,2차원 탐색]

굥굥이·2021년 12월 29일
0
post-thumbnail

1. 문제

<격자판 최대합>
: N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력한다.

2. 해결 방법

  1. 변수 answer과 sum1과 sum2를 선언한다. 그리고 변수 n을 선언하여 배열의 길이로 초기화한다.
  2. 행이 0일 때, 열을 0,1,2,3,4 이동 반복. 그리고 sum1에 값 누적
    열이 0일 때, 행을 0,1,2,3,4 이동 반복. 그리고 sum2에 값 누적.
    그렇게 해서 answer, sum1, sum2값들의 최댓값(Math.max)을 answer에 대입.
    대각선은, 행이 0일 때 열도 0, 행이 1일 때 열도 1. 이런식으로 코드 짜면 됨.
    다른 대각선은 머리써서 직접 짜보기.
  3. 첫 번째 for문 끝나고 나서, sum1과 sum2의 값을 0으로 초기화해주는 거 잊지 않기!

! 플러스 개념
-> 2차원 배열

  • arr[행:가로][열:세로]

3. 정답

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

4. 내 코드와 비교 그리고 반성

2차원을 몰라서 노가다로 짤 수밖에 없었다. 그래서 짜다가 이건 아닌 거 같아서 그냥 정답을 봤다.

profile
아자아자 파이띵굥!

0개의 댓글