JS 알고리즘 문제풀이/섹션 2. 1, 2차원 배열 탐색

6.격자판 최대합

crab. 2022. 1. 13. 11:31

📌강의 정리

행번호와 열번호를 생각한다.

arr[행][열] 이다.

Number.MIN_SAFE_INTEGER를 하면 최소값을 넣을 수 있다.

이중포문으로 행탐색 열탐색을 할수가 있다.

이제 sum1+=arr[i][j], sum2+=arr[j][i]를 하면 행의 총합, 열의 총합을 구할 수 있다.

처음 포문이 시작될때 섬1,섬2를 0으로 초기화하는 코드를 넣어주고

두번째 포문이 하나 끝날때마다 Math.max(answer, sum1, sum2)를 통해 answer에 최대값을 넣어준다.

그 다음 대각선을 계산하기위해 다시 포문을 이용한다.

이때 포문은 하나만 사용해도된다.

arr[i][i]는 오른쪽 아래로 가는 대각선이다.

또한 왼쪽 아래로 대각선은 arr[i][n-i-1]을 하면 구현가능하다.

격자무늬에 하나씩 세어봐서 규칙을 찾으면 쉽게 알 수 있다.

📌느낀점

문제를 풀긴했지만 강사님과 나의 코드중에서 어떤 것이 더 잘 풀어졌는지는 모르겠다.

강사님의 코드에서 눈여겨 볼점은 Number.MIN_SAFE_INTEGER 와 Math.max(answer, sum1, sum2)

이다.

특히 Math.max는 진짜 유용하게 잘 쓰일 수 있으므로 꼭 잘 알아둬야겠다.

//나의 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){
                let max = 0;
                let tmp=0; let tmp2=0; let tmp3=0; let tmp4 = 0;
                for(let i = 0; i<arr[0].length; i++){
                    for(let j = 0; j<arr[i].length; j++){
                        tmp += arr[i][j];
                        tmp2 += arr[j][i];
                        if(i === j) tmp3 += arr[i][j]
                        if(i+j === arr[0].length-1) tmp4 += arr[i][j]
                    }
                    if(max<tmp) max = tmp;
                    if(max<tmp2) max = tmp2;
                    if(max<tmp3) max = tmp3;
                    if(max<tmp4) max = tmp4;
                    tmp = 0; tmp2 = 0;
                }
                console.log(tmp3)
                console.log(tmp4)
                answer = max;
                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>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <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>
    </body>
</html>

'JS 알고리즘 문제풀이 > 섹션 2. 1, 2차원 배열 탐색' 카테고리의 다른 글

7.봉우리  (0) 2022.01.13
5.등수구하기  (0) 2022.01.12
4.점수계산  (0) 2022.01.12
3.가위바위보  (0) 2022.01.12
2.보이는 학생  (0) 2022.01.12