5X5 격자판에서 각 행과 열의 합, 대각선의 합 중 가장 큰 수를 구하시오.
1. 내 문제풀이 방식
문제를 잘 못 이해하여서, 1~5열 1~5행을 전부다 구해야되는 지 모르고 문제의 그림대로의 행과 열만 구하였다.
function solution(arr){
let column = 0,
row = 0,
diagonal1 = 0,
diagonal2 = 0;
for(x of arr[1]){
row+=x
}
for(let y=0; y<arr.length; y++){
column+=arr[y][1];
}
for(let n=0; n<arr[0].length; n++){
diagonal1+=arr[n][n]
}
for(let i=0; i<arr[0].length; i++){
for(let j=arr[0].length-1; j>-1; j--){
if(i+j===4){
diagonal2+=arr[i][j]}
}
}
return Math.max(row,column,diagonal1,diagonal2);
}
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));
격자판이 5x5이니 i+j===4 라는 조건을 걸어서 대각선을 구하였다.
2. 인프런 문제풀이 방식
function solution(arr){
let answer=Number.MIN_SAFE_INTEGER;
let n=arr.length;
let sum1=sum2=0;
for(let i=0; i<n; i++){
sum1=sum2=0;
for(let j=0; j<n; j++){
sum1+=arr[i][j];
sum2+=arr[j][i];
}
answer=Math.max(answer, sum1, sum2);
}
sum1=sum2=0;
for(let i=0; i<n; i++){
sum1+=arr[i][i];
sum2+=arr[i][n-i-1];
}
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));
sum1과 sum2을 0으로 초기화시켜주고, 각 열과 행의 합을 구한뒤 answer(최대합)을 갱신시켰다.
똑같이 sum1과 sum2를 초기화하고, 각 대각선의 합을 구한뒤 갱신하였다.
'📝 꾸준함이 무기 > Algorithm' 카테고리의 다른 글
[백준/Node.js] 10250 ACM 호텔 (0) | 2021.06.22 |
---|---|
[백준/Node.js] 4948 베르트랑 공준 (0) | 2021.06.16 |
[백준/Node.js] 2941 크로아티아 알파벳 (0) | 2021.06.15 |
[CT] 가장 짧은 문자거리 (0) | 2021.05.09 |
[CT] 등수구하기 (임의의 배열 만들기(초기화포함)) (0) | 2021.05.01 |