m x n 크기의 중복된 숫자가 없는 2차원 배열이 주어질 때 모든 lucky numbers 를 리턴하는 문제이다
여기서 lucky numbers는 행에서 가장 작은 값이면서 열에서 가장 큰값인 숫자이다.
Example을 보자
1번 예시를 보면 15가 정답인데 15는 3행에서 가장 작은 값이면서 1열에서 가장 큰값이므로 lucky numbers이다.
const luckyNumbers = function (matrix) {
const min = [];
const max = [];
let result = [];
const height = matrix.length;
const width = matrix[0].length;
for (let i = 0; i < height; i++) {
min.push(Math.min(...matrix[i]));
}
for (let i = 0; i < width; i++) {
let temp = [];
for (let j = 0; j < height; j++) {
temp.push(matrix[j][i]);
}
max.push(Math.max(...temp));
}
result = max.filter((num) => min.includes(num));
return result;
};
각 행과 각 열에서 최솟값과 최댓값을 가지는 요소들을 min, max 배열에 넣어주기로 했다.
그리하여 우선 각 행의 숫자들 중 최솟값을 min 배열에 넣어주었고
각 열의 최댓값을 max 배열에 넣어주기위해 우선 temp 배열에 각 열의 요소들을 넣은다음 temp 안의 숫자들 중 최댓값을 max 배열안에 넣어주었다.
여기까지 진행하면 min 배열과 max 배열안에 숫자들이 있는데 두 배열에 모두 포함되어 있는 숫자가 행에서 최솟값이면서 열에서 최댓값인 lucky numbers가 된다.
그리하여 filter 메소드를 이용하여 max 배열 숫자들 중 min 배열에도 포함되어있는 숫자들의 배열을 result 배열에 넣어주고 리턴을 해주었다.
submit을 해보니
정답이었다!