※ 문제
격자판 최대합 5*5 격자판에 아래롸 같이 숫자가 적혀있습니다.
N*N의 격자판이 주어지면 각 행의 합, 각 열의 합, 두 대각선의 합 중 가 장 큰 합을 출력합니다.
▣ 입력설명
첫 줄에 자연수 N이 주어진다.(1<=N<=50) 두 번째 줄부터 N줄에 걸쳐 각 줄에 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
※ 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
let answer = Number.MIN_SAFE_INTEGER;
let a = b = 0;
for (let i = 0; i < arr.length; i++) {
a = b = 0;
for (let j = 0; j < arr.length; j++) {
a += arr[i][j];
b += arr[j][i];
}
answer = Math.max(answer, a, b);
}
for (let i = 0; i < arr.length; i++) {
a = arr[i][i];
b = arr[i][arr.length - 1 - i];
}
answer = Math.max(answer, a, b);
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>
※ 설명
2차원 배열을 탐색하려면 이중 for문을 사용한다. (arr[i][j]) 각 행의 값을 구하려면 i가 정체 되어있을 동안 j가 증가하는 값을 더해가면된다.
각 열의 값을 구하려면 j가 정체 되어있을 동안 i가 증가하는 값을 더해가면 된다.
두 대각선의 값을 구한다.
오른쪽 아래로 향하는 대각선의 값을 구하려면 두 index의 값이 같아지면서 증가하는 값을 더해가면 된다.
왼쪽 아래로 향하는 대각선의 값을 구하려면 i는 그대로 증가하되 반대로 j값이 마지막부터 0까지 감소하는 값을 더해가면 된다.
최대값을 구해야하므로 answer에 최솟값을 할당해 놓고 각 값을 Math.max()함수를 사용하여 최댓값을 구한다.
※ 핵심
- 2차원 배열을 탐색하기 위해선 2중 for문을 사용해야한다.
- 행과 열의 값을 구하기 위한 index의 위치(i, j)를 판단해야한다.
해당 내용은 김태원님의 자바스크립트 알고리즘 문제풀이 강의를 듣고 작성한 글입니다.
'🤯 코딩테스트 > Javscript' 카테고리의 다른 글
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 03 - 회문 문자열 (0) | 2022.01.10 |
---|---|
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 봉우리 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 등수구하기 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 점수계산 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 가위 바위 보 (0) | 2022.01.10 |