[JS알고리즘] 격자판 최대합



N*N 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가장 큰 합을 출력한다


function solution(arr){  
  let answer=Number.MIN_SAFE_INTEGER;
  let n=arr.length;
  let sum1=sum2=0;
  for(let i=0; i<n; i++){	//행, 열의 최대값 구하는 for
    sum1=sum2=0;	//j for문이 끝나면 매번 초기화 시켜주어야 한다
    for(let j=0; j<n; j++){
      sum1+=arr[i][j]; //i를 기준으로 j의 모든 값을 더하여 누적한다. 행을 기준으로 열 값의 합
      sum2+=arr[j][i]; //j를 기준으로 i의 모든 값을 더하여 누적한다. 열을 기준으로 행 값의 합
    }
    answer=Math.max(answer, sum1, sum2); //answer, sum1, sum2 중에서 가장 큰 값이 answer로 입력
  }
  
  sum1=sum2=0; //이제는 새로 대각선의 합을 구해야하기 때문에 초기화 해주어야 함. 
  for(let i=0; i<n; i++){	//대각선의 최대값 구하는 for
    sum1+=arr[i][i];	//똑같은 인덱스의 행과 열 (1,1) (2,2)...
    sum2+=arr[i][n-i-1]; //sum1과 대칭인 값을 구해주어야 한다
  }  
  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));




inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora