
😎풀이
- 열(col) 별 최댓값을 미리 조회 (한 번만 조회하는 것이 아닌 행 수 만큼 필요하기 때문에 시간복잡도 증가 가능성 높음)
- 2차원 배열 전체순회
- 현재 행에서의 최댓값 조회
- 현재 셀이 다음과 같은 규칙을 따르는지 확인
4-1. 속한 행에서의 최솟값인가?
4-2. 속한 열에서의 최댓값인가?
- 모두 참이라면, 정답 배열에 추가
- 추가된 정답 배열 반환환
function luckyNumbers(matrix: number[][]): number[] {
const rowMax = matrix.length
const colMax = matrix[0].length
const colMaxies = []
for(let col = 0; col < colMax; col++) {
let curMax = -Infinity
for(let row = 0; row < rowMax; row++) {
const curVal = matrix[row][col]
if(curMax >= curVal) continue
curMax = curVal
}
colMaxies.push(curMax)
}
const luckyNumbers = []
for(let row = 0; row < rowMax; row++) {
const rowMin = Math.min(...matrix[row])
for(let col = 0; col < colMax; col++) {
const curVal = matrix[row][col]
if(rowMin !== curVal) continue
if(colMaxies[col] !== curVal) continue
luckyNumbers.push(curVal)
}
}
return luckyNumbers
};