[アルゴリズム/1,2 D配列を参照]グリッドの最大和-行、列、対角線の最大値を求める


質問:行、列、対角線、およびの最大和を求める
  • 列と行が混ざっているところがあるので、必ずチェック!
    =>二重配列[行][列]
  • 行目の和は?1行目1行目すべての列の合計(横)
  • 1列の和は?1列目のすべての行の合計(垂直)
    ---第1列2列3列4列5列
    1行目[10,13,10,12,15]->1行目の和(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]+arr[1]+arr[3][1].

    に答える

  • デュアルfor文は、デュアル配列の行(i)および列(j)をクエリーします.
  • sum 1は列の和を含み、sum 2は行の和を含む.
  • 行と列に1行を加え、次の行と列の和を含むためにsum 1とsum 2を0に初期化します.
  • と1に上りの値を加算する場合は、カラム番号を+1に設定します
  • sum 2にカラム値を追加する場合は、行番号を+1に設定します.
  • result変数では、行と列の合計1と2に大きな値が含まれます.
    ->結果に含まれる値(行、列の大きな値)とsum 1、sum 2を他の行と列の和と繰り返し比較すると最大値が得られます.
  • 行と列を比較した場合、対角線和が比較されます.
  • sum 1、sum 2は0に初期化され、sum 1は左対角線を含み、sum 2は右対角線の和を含む.
  • sum 2の値はarr[i][arr.length-i-1]に設定されています.これは右対角線の最初の行と最後の5列であるためです.
    ->最初の5列目は配列のインデックス4==で、配列の長さ-1であるためです.
  • result(行と列の大きな値を含む)とsum 1(左対角線)、sum 2(右対角線)の値を比較し、最大値を算出します.
  • は、
  • の結果を返します.
  • (最高価格)
    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));