문제: 행의 합, 열의 합, 대각선 합중 가장 큰 합 구하기
--- 1열 2열 3열 4열 5열
1행 [[10, 13, 10, 12, 15], -> 1행의 합 (첫번째 줄 1행 모든 열들의 합인 것이다!)
2행 [12, 39, 30, 23, 11], -> 2열의 합
3행 [11, 25, 50, 53, 15],-> 3열의 합
4행 [19, 27, 29, 37, 27], -> 4열의 합
5행 [19, 13, 30, 13, 19]] -> 5열의 합
ex)
1행 합 = arr[0][0] + arr[0][1] + arr[0][2] ..// 가로합 왼쪽에서 오른쪽값
10 + 13 + 10 + ....
2행 합 = arr[1][0] + arr[1][1] + arr[1][2] ..
1열 합 = arr[0][0] + arr[1][0] + arr[2][0] ..// 세로합 위에서 아래
10 + 12 + 11 + ....
2열 합 = arr[0][1] + arr[1][1] + arr[3][1] ..
function solution(arr){
let result = 0;
let sum1 = 0;
let sum2 = 0;
for(let i = 0; i < arr.length; i++){
// 1열 1행-> 1열 2행 -> 쭉 더해지도록 초기화를 시켜야한다.
// 한 줄이 다 더해지면 열, 행을 합한 값을 초기화한다.
sum1=sum2=0;
for(let j = 0; j < arr.length; j++){
sum1 += arr[i][j]; // 행을 다 더할때, 열번호가 증가(j) 행번호(i)가 고정
// 행 = arr[0][0] + arr[0][1] + arr[0][2]
sum2 += arr[j][i];
// 열을 다 더할때, 행번호가 증가(j) 열번호(i)가 고정
//열 = arr[0][0] + arr[1][0] + arr[2][0]
}
// 가장 큰 값을 담아준다. (행과 열의 합 중에서!)
result=Math.max(result, sum1, sum2);
}
// 대각선을 구하기 위해 우선 초기화를 시켜준 뒤 시작
sum1=sum2=0;
for(let i=0; i<arr.length; i++){
sum1+=arr[i][i]; // 왼쪽에서 시작하는 대각선
sum2+=arr[i][arr.length-i-1]; // 반대쪽 오른쪽에서 시작하는 대각선
}
// result(행과 열중 큰값이 담김), (대각선1),(대각선2) 중 가장 큰값 골라서
result=Math.max(result, sum1, sum2); // 가장 큰값담기
}
return result; // 155
}
```
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));