[アルゴリズム]メッシュの最大化
18618 ワード
グリッドの最大値と
5*5グリッドボードの数字は次のとおりです.
N*Nのメッシュボードは、各行の和、各列の和、2対角線の和の最大和を出力します.
はい.
■説明の入力
最初の行は自然数Nを与える.(1<=N<=50)2行目から、行ごとにN個の自然数がある.各自然数は100を超えない.
■出力説明
最大和を出力します.
■入力例1
5
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
■出力例1
155
対角線の和、各行の和、各列の和の最大和をそれぞれ求め、この3つの値の最大和と後出力を求めることができます.
説明する
function solution(arr) {
let answer,
rowSum,
columnSum,
crossSum,
tempSum1,
tempSum2 = 0;
// rowSum 구하기
arr.forEach((arrItem) => {
rowSum < arrItem.reduce((acc, cur) => acc + cur)
? (rowSum = arrItem.reduce((acc, cur) => acc + cur))
: null;
});
// columnSum 구하기
for (let i = 0; i < arr.length; i++) {
let tempSum = 0;
for (let j = 0; j < arr.length; j++) {
tempSum += arr[j][i];
columnSum < tempSum ? (columnSum = tempSum) : null;
}
}
// crossSum 구하기
for (let i = 0; i < arr.length; i++) {
tempSum1 += arr[i][i];
tempSum2 += arr[arr.length - i - 1][arr.length - i - 1];
}
tempSum1 > tempSum2 ? (crossSum = tempSum1) : (crossSum = tempSum2);
rowSum > columnSum ? (answer = rowSum) : (answer = columnSum);
crossSum > answer ? (answer = crossSum) : null;
return answer;
}
ちょっと複雑に見えますが、この方法以外は思い出せません.이중 for문
と書きたくなくてもがく.講師の説明
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;
}
ああああMath.max
!まずコード数が私よりずっと短いです.行と列の和を一式で求める.それでいいと思ったのに.別の解釈
function solution(n, arr) {
let row = (column = normal = reverse = 0);
// row
for (let i = 0; i < n; i++) {
let rowSum = arr[i].reduce((acc, cur) => acc + cur, 0);
row = Math.max(row, rowSum);
}
// column
for (let i = 0; i < n; i++) {
let columnSum = 0;
for (let j = 0; j < n; j++) {
columnSum += arr[j][i];
}
column = Math.max(column, columnSum);
}
// diagonal
for (let i = 0; i < n; i++) {
normal += arr[i][i];
reverse += arr[i][n-i-1];
}
return Math.max(row, column, normal, reverse);
}
私の説明と同じです.最後にMath.max
を用いて一括比較を行った.私は3つの演算子を乱発しすぎた.Reference
この問題について([アルゴリズム]メッシュの最大化), 我々は、より多くの情報をここで見つけました https://velog.io/@shinwonse/알고리즘-격자판-최대합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol