문제설명
N*N크기의 표가 숫자로 채워져있다.
각 행의 합
각 열의 합
좌상우하 대각선 합
우상좌하 대각선 합 중
가장 큰 합을 구하라.
10 | 13 | 10 | 12 | 15 |
12 | 30 | 30 | 23 | 11 |
11 | 25 | 50 | 53 | 15 |
19 | 27 | 29 | 37 | 27 |
19 | 13 | 30 | 13 | 19 |
접근방법
다행히 2차배열로 만들어서 입력해주더라..
배열 부터 만들었으면 귀찮았을거 같다.
좋은 방법이 있을까 고민을 해봤는데,
그냥 각 행의 합, 각 열의 합, 대각선 합 두개
총 12개의 숫자 다 한 배열에 때려 넣고
Math.max 돌리면 되는 거 아닌가..
function getBiggestSum(arr) {
//모든 합이 들어가는 배열
const sum = [];
//가로열 합
for (let i = 0; i < arr.length; i++) {
sum.push(arr[i].reduce((val, cur) => val + cur, 0));
}
//세로열 합
for (let i = 0; i < arr.length; i++) {
let rowSum = 0;
for (let j = 0; j < arr.length; j++) {
rowSum += arr[j][i];
}
sum.push(rowSum);
}
//좌상당 대각선 합
let diagonal1 = 0;
for (let i = 0; i < arr.length; i++) {
diagonal1 += arr[i][i];
}
sum.push(diagonal1);
//우상단 대각선 합
let j = 4;
let diagonal2 = 0;
for (let i = 0; i < arr.length; i++) {
diagonal2 += arr[i][j];
j -= 1;
}
sum.push(diagonal2);
return Math.max(...sum);
}
..ㅎ 진짜 개무식한 방법이다..
저 대각선 합은 그렇다쳐도
왜 행과 열의 합을 구할 때 for문 한번으로 해결할 생각을 못하고
다 따로 구했을까.
이 문제 풀 때 내 머릿속은 이랬다.
다 구한다음에 한배열에 때려넣고
제일큰거 구하자 헿!
우선 행의 합은 한줄씩 reduce로
세로는 이중for문으로
좌상우하 대각선은 [i][i]로
우상좌하 대각선은 for문 하나에 j는 1씩작아지게 하면 될듯! 헿!
물론 답은 나왔다.
근데 다풀고 나니까 이거 좀 아닌데 싶어서
한참 고민해봤는데 한번 머리에 저걸로 굳어지니까 다른 생각은 나질 않는다.
결국 센세의 해답을 봤다.
function getBiggestSum2(arr) {
let answer = 0;
let sum1 = 0;
let sum2 = 0;
for (let i = 0; i < arr.length; i++) {
sum1 = 0;
sum2 = 0;
for (let j = 0; j < arr.length; j++) {
sum1 += arr[i][j];
sum2 += arr[j][i];
}
answer = Math.max(answer, sum1, sum2);
}
sum1 = 0;
sum2 = 0;
for (let i = 0; i < arr.length; i++) {
sum1 += arr[i][i];
sum2 += arr[i][arr.length - 1 - i];
}
return Math.max(answer, sum1, sum2);
}
ㅎ...
1번 for문에서 2중for문으로 행의 합과 , 열의 합을 한번에 구했다.
arr[i][j], arr[j][i]로 하면 되는데 저 생각을 아예 못했다.
그리고 여기서 answer에다가 행의 합, 열의 합중 가장 큰 수를 넣는 것도 생각 못 했다.
그리고 2번 for문에서는
대각선의 합을 한번에 구했다.
arr[i][i]와 arr[arr.length -1 -i] 로 훨씬 간단하게 구현했다.
센세의 코드와 내 코드 둘다 O(N^2)의 시간 복잡도는 같지만
코드를 봤을 때 마음의 복잡해지는건 내 코드다.
많이 연습하자..
'문제풀이 > 인프런 알고리즘 문제풀이' 카테고리의 다른 글
4-5 k번째 큰수 (0) | 2021.12.20 |
---|---|
4-4 졸업선물 (0) | 2021.12.20 |
4-3 멘토링 (0) | 2021.12.20 |
4-2 뒤집은 소수 (0) | 2021.12.14 |
4-1 자릿수의 합 (0) | 2021.12.14 |
댓글