[LeetCode] Lucky Numbers in a Matrix

아르당·2026년 4월 30일

LeetCode

목록 보기
288/303
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

서로 다른 숫자로 된 m x n 행렬이 주어졌을 때, 순서에 상관없이 행렬에 있는 모든 행운의 숫자를 반환해라.

행운의 숫자는 행렬해서 각 행의 최소값이고 각 열의 최대값인 원소이다.

Example

#1
Input: matrix = [[3, 7, 8], [9, 11, 13], [15, 16, 17]]
Output: [15]
Explanation: 15는 해당 행에서 최소값이고 해당 열에서 최대값이라서 유일한 행운의 숫자이다.

#2
Input: matrix = [[1, 10, 4, 2], [9, 3, 8, 7], [15, 16, 17, 12]]
Output: [12]
Explanation: 12는 해당 행에서 최소값이고 해당 열에서 최대값이라서 유일한 행운의 숫자이다.

#3
Input: matrix = [[7, 8], [1, 2]]
Output: [7]
Explanation: 7은 해당 행에서 최소값이고 해당 열에서 최대값이라서 유일한 행운의 숫자이다.

Constraints

  • m == mat.length
  • n == mat[i].length
  • 1 <= n, m <= 50
  • 1 <= matrix[i][j] <= 10^5
  • 행렬의 모든 요소는 서로 다르다.

Solved

class Solution {
    public List<Integer> luckyNumbers(int[][] matrix) {
        int N = matrix.length;
        int M = matrix[0].length;
        
        int rln = Integer.MIN_VALUE;

        for(int i = 0; i < N; i++){
            int rMin = Integer.MAX_VALUE;

            for(int j = 0; j < M; j++){
                rMin = Math.min(rMin, matrix[i][j]);
            }

            rln = Math.max(rln, rMin);
        }

        int cln = Integer.MAX_VALUE;

        for(int i = 0; i < M; i ++){
            int cMax = Integer.MIN_VALUE;

            for(int j = 0; j < N; j++){
                cMax = Math.max(cMax, matrix[j][i]);
            }

            cln = Math.min(cln, cMax);
        }

        if(rln == cln){
            return new ArrayList<>(Arrays.asList(rln));
        }

        return new ArrayList<>();
    }
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글