HackerRank
[해커랭크] (Data Structures - Arrays) 2D array - DS; 모래시계 행렬 (javascript)
hee0
2022. 9. 5. 15:00
6x6 행렬의 배열이 주어질 때, 아래 모래시계배열의 합의 최댓값을 구하라
a b c
d
e f g
조건
- 입력값은 int arr[6][6]
- 각 배열을 순차적으로 돌면서 모래시계 배열의 합이 최댓값인 경우 반환
- 아래 행렬이 주어진 경우, 모래시계배열은 그림 1.과 같이 표현될 수 있음
1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0
제한사항
- -9 ≤ arr[i][j] ≤ 9
- 0 ≤ i, j ≤ 5
나의 풀이
- 2중 배열을 단일 배열(const lines)로 변환하여 수행
- n 중 배열을 단일배열화하는 법
- arr.join(',').split(',')
- n 중 배열을 단일배열화하는 법
- 모래시계의 배열은 3x3 배열이므로 배열길이의 -2만큼만 반복을 수행하며 행렬을 순회
- 3x3의 배열에서 모래시계배열 위치는 아래 그림2.와 같음
- 즉, 행과열을 각각 한칸씩 이동하며 해당 모래시계 배열에 해당하는 인덱스에 위치한 값을 추출
- 추출한 배열값의 합을 비교하여 최댓값을 추출
// 생략
/*
* Complete the 'hourglassSum' function below.
*
* The function is expected to return an INTEGER.
* The function accepts 2D_INTEGER_ARRAY arr as parameter.
*/
function hourglassSum(arr) {
// Write your code here
const len = arr.length;
const lines = [...arr.join(',').split(',')];
let max = -Infinity;
for(let j = 0; j<len-2;j++) {
for(let i = 0; i <len-2;i++){
const j1 = j*len;
const j2 = (j+1)*len;
const j3 = (j+2)*len;
const hourglass = [lines[i+j1], lines[i+1+j1], lines[i+2+j1], lines[i+1+j2], lines[i+j3], byte[i+1+j3], byte[i+2+j3]];
const sum = hourglass.reduce((a, b) => a += +b, 0);
max = Math.max(max, sum);
}
}
return max;
}
// ...후략
결과