[알고리즘] 격자판 최대합(2차원 배열)

호두파파·2022년 1월 20일
0

알고리즘 연습

목록 보기
39/60

문제

N*N 격자판이 주어지면 각 해으이 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력하세요.

입력예제

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

출력예제

155


풀이

  • Math.max()메소드를 사용해 각 행의 합, 각 열의 합을 구한다.
    행의 합, 열의 합을 구하기 위해 두 개의 변수를 선언해준다.
  • 각 대각선의 합을 구한다.
  • 비교해서 최대값을 구해서 answer에 넣는다.
  • answer을 출력한다.
function solution(arr){
  let answer;
  let len = arr.length;
  let sum1 = 0; // 행의 합
  let sum2 = 0; // 열의 합 
  for (let i = 0; i < len; i++) {
    sum1 = 0;
    sum2 = 0;
    for (let j = 0; j < len; j++) {
      sum1 += arr[i][j];
      sum2 += arr[j][i];
    }
    answer = Math.max(sum1, sum2) // 최대값을 구하는 메소드  
  }
  // 변수의 스코프 범위를 고려해서, 대각선의 합을 구해주기 위해 다시 선언해준다.
  sum1 = 0;
  sum2 = 0;
  for (let i = 0; i < len; i++) {
    // 대각선 구하기
    sum1 += arr[i][i]; // 똑같은 인덱스의 행과 열
    sum2 += arr[i][len-i-1]; // sum1과 대칭인 값;
  }
  answer = Math.max(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));
profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글