만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/leetcode

[leetcode] Search a 2D matrix

D36choi 2022. 3. 31. 00:58
728x90

문제

https://leetcode.com/problems/search-a-2d-matrix/submissions/

 

Search a 2D Matrix - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

내 풀이

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        
        int row = matrix.length-1;
        for(int i=0; i<matrix.length-1; i++) {
            if (matrix[i][0] <= target && matrix[i+1][0] > target) {
                row = i;
                break;
            }
        }

        int[] targetRow = new int[matrix[0].length];
        for(int i=0; i<matrix[0].length; i++) {
            targetRow[i] = matrix[row][i];
        }
        
        return bin_search(target, targetRow);
        
    }
    
    private boolean bin_search(int target,int[] row) {
        
        int left = 0;
        int right = row.length - 1;
        while(left<=right) {
            int mid = left + (right-left) / 2;
            if (row[mid] == target) {
                return true;
            }
            if (row[mid] > target) {
                right = mid - 1;
            }
            else if (row[mid] < target) {
                left = mid + 1;
            }
        }
        return false;
        
    }
}

알게 된 것

binary_search 가 익숙해졌다. 외워졌다.

binary_search 는 타겟보다 낮고 많은 숫자의 갯수 구하기로도 사용할 수 있다. (이것 미만이 몇개, 이것 이상이 몇개 등)

정렬된 2d array 에서 특정 값을 빨리 찾기 위해서는 row 를 먼저 찾는방법이 나는 먼저 떠오를 것 같다.

 

피드백

변수명이 그지같다.

2d array 의 length 를 구하는 법이 헷갈릴 필요가 없는데 헷갈렸다. (matrix[0].length, matrix.length)