5*5 격자판에 아래와 같이 숫자가 적혀있습니다.
NxN의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.
[입력설명]
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
[출력설명]
최대합을 출력합니다.
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
155
arr[행][[열]
로 나타낸다.arr[1][j]
가 되어야한다.(j가 모두 탐색) 반대로, 1열의 합을 구하고 싶다면 arr[i][1]
이 되어야한다.(i가 모두 탐색)let answer=Number.MIN_SAFE_INTEGER
와 같이, answer은 가장 작은 값으로 초기화한다. Math.max(a, b, c)
를 통해 a, b, c 중 큰 값을 선택한다. <html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer=Number.MIN_SAFE_INTEGER; //최대합을 출력해야하니까, 작은값으로 초기화
let n=arr.length; //arr.length: 행크기
let sum1=sum2=0; //전역변수로 만듦(서로 다른 for문에서 모두 활용할 수 있게), sum1: 행의 합, sum2: 열의 합
//행, 열의 합
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); //answer, sum1, sum2중 가장 큰 값이 answer에 대입됨
}
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); //answer, sum1, sum2중 가장 큰 값이 answer에 대입됨
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));
</script>
</body>
</html>
155
9/10