2-6) 격자판 최대합

김예지·2021년 8월 26일
1

문제

5*5 격자판에 아래와 같이 숫자가 적혀있습니다.

NxN의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.
[입력설명]
첫 줄에 자연수 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


문제 풀이

예습 이론

  • 행과 열
    배열에서 행과 열은 arr[행][[열]로 나타낸다.
  • 만약, 1행의 합을 구하고 싶다면 arr[1][j]가 되어야한다.(j가 모두 탐색) 반대로, 1열의 합을 구하고 싶다면 arr[i][1]이 되어야한다.(i가 모두 탐색)
    즉, 특정 행을 탐색하고 싶다면 행이 고정되어야 하고, 특정 열을 탐색하고 싶다면 열이 고정되어야 한다.

코드

  • (1)행/열의 합을 구하고, (2)대각선의 합을 구해야한다. 각각을 구하는 for문을 작성해야한다.
  • 최대값을 출력해야하기 때문에, let answer=Number.MIN_SAFE_INTEGER와 같이, answer은 가장 작은 값으로 초기화한다.
  • Math.max(a, b, c)를 통해 a, b, c 중 큰 값을 선택한다.
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){  
                let answer=Number.MIN_SAFE_INTEGER; //최대합을 출력해야하니까, 작은값으로 초기화
                let n=arr.length; //arr.length: 행크기 
                let sum1=sum2=0; //전역변수로 만듦(서로 다른 for문에서 모두 활용할 수 있게), sum1: 행의 합, sum2: 열의 합 
                //행, 열의 합 
                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); //answer, sum1, sum2중 가장 큰 값이 answer에 대입됨
                }
                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); //answer, sum1, sum2중 가장 큰 값이 answer에 대입됨
                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>

결과

155

profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

2개의 댓글

comment-user-thumbnail
2021년 9월 11일

9/10

답글 달기
comment-user-thumbnail
2021년 9월 11일

9/11

답글 달기