격자판 최대합 - (2차원 배열 행, 열, 두 대각선 합 구하기)
2차원 배열 행과 열의 합, 두 대각선 합 구하기
👉 행과 열의 갯수가 같은 n * m 배열이 주어졌을 때, 각 행의 합, 각 열의 합, 두 대각선의 합 중 최대값을 구하는 문제이다.
문제에서 제시하는 그대로 각 행의 합, 각 열의 합, 두 대각선 중 가장 큰 값을 구하면 된다.
그럼 이를 코르돌 풀어보자.
코드
function solution(arr) {
let answer = Number.MIN_SAFE_INTEGER;
let n = arr.length;
let sum1 = sum2 = 0;
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
sum1 += arr[i][j]; ... 1
sum2 += arr[j][i]; ... 2
}
answer = Math.max(answer, sum1, sum2); ... 3
sum1 = sum2 = 0;
}
sum1 = sum2 = 0; ... 4
for (let i = 0; i < n; i++) {
sum1 += arr[i][i]; ... 5
sum2 += arr[i][n - i - 1]; ... 6
}
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));
👉 위의 코드를 살펴보자.
-
i = 0, j가 0부터 4까지 돌면서 sum1에 첫 행에 있는 값들을 더해준다.
-
1에서처럼 sum2에 첫 열에 있는 값들을 더해준다.
-
answer와 sum1, sum2를 더해준다. Math.max 함수를 이용하여 최댓값을 answer에 넣어준다.
이를 배열의 길이만큼 반복하여 모든 행, 열 중 최대값을 구할 수 있다. -
값 비교가 끝났다면 sum1과 sum2를 0으로 초기화 해준다.
-
왼쪽 위에서 오른쪽 아래로 향하는 대각선은 행과 열의 인덱스가 같기 때문에 i를 넣어주면 된다.
-
오른쪽 위에서 왼쪽 아래로 향하는 대각선은 행은 i 열은 배열의 마지막 인덱스에서 i만큼 빼면 값을 얻을 수 있다.
대각선의 합을 구할 때, 한 개의 인덱스 값을 이용하여 구할 수 있다는 걸 생각하지 못했었다. 앞으로 이를 잘 활용해야겠다.
출처 - 자바스크립트 알고리즘 문제풀이
Author And Source
이 문제에 관하여(격자판 최대합 - (2차원 배열 행, 열, 두 대각선 합 구하기)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rkrkdldkd/격자판-최대합2차원-배열-행-열-두-대각선-값-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)