2차원 배열 - 격자판 최대합

2024. 1. 11. 14:52알고리즘

격자판 각 행의 합, 각 열의 합, 두 대각선의 합 중에 가장 최대값을 구하는 문제이다.

 

문제에 나와있는대로 각 행의 합 중에 최댓값을 구하고, 각 열의 값들이 모아있는 배열을 만든 후 최댓값을 구하고

각각의 대각선의 합을 구한 뒤에 가장 큰 값을 구해주면 된다.

정답은 맞추었지만 행렬의 개념에 오류가 있다는 것을 깨달았다.

 

0 1 2 3 4
1        
2        
3        
4        

 

네모 안에 있는 숫자는 인덱스이다. 

2차원 배열로 행렬을 표현할 때 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

 

예를 들어 다음과 같이 요소가 저장되어 있을때,

arr[2][3]은 53이 된다. 2번째 행의 3번째 열의 요소가 되기 때문이다.

 

function solution(arr) {
  let answer = 0;
  let n = arr.length;

  let sum1 = 0; // 각 행의 합, 대각선1의 합
  let sum2 = 0; // 각 열의 합, 대각선2의 합

  for (let i = 0; i < n; i += 1) {
    sum1 = 0;
    sum2 = 0;
    for (let j = 0; j < n; j += 1) {
      sum1 += arr[i][j];
      sum2 += arr[j][i];
    }

    answer = Math.max(answer, sum1, sum2);
  }

  sum1 = 0;
  sum2 = 0;
  for (let i = 0; i < n; i += 1) {
    sum1 += arr[i][i];
    sum2 += arr[i][n - i - 1];
  }

  answer = Math.max(answer, sum1, sum2);

  return answer;
}

 

'알고리즘' 카테고리의 다른 글

브루트 포스 - 멘토링  (0) 2024.01.12
2차원 배열 - 봉우리  (2) 2024.01.11
브루트 포스 - 블랙잭  (0) 2024.01.10
점근적 표기 1  (1) 2024.01.10
시간 복잡도  (1) 2024.01.10