코딩테스트/LeetCode

[Python][LeetCode] Search a 2D Matrix II(2D 매트릭스 검색)

jungmin.park 2023. 11. 1. 16:50

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

 

Search a 2D Matrix II - LeetCode

Can you solve this real interview question? Search a 2D Matrix II - Write an efficient algorithm that searches for a value target in an m x n integer matrix matrix. This matrix has the following properties: * Integers in each row are sorted in ascending fr

leetcode.com

문제 설명:

행렬이 주어졌을때 target의 값을 구하는 문제이다.

 

 

방법1

  • 플래그를 설정해준다. 만약 target을 찾으면 true값을 반환하도록 한다.
  • 행렬에서 한 행씩 가져오도록 한다.
  • 한행에서 이진탐색을 해 찾은 인덱스를 반환받도록 한다.
  • 실제 행렬에 있는 값과 타겟이 같은 값인지 확인하고 맞으면 플래그를 전달한다.
class Solution:
    def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
        flag = False
        for idx,col in enumerate(matrix):
            num_idx = bisect.bisect_left(col, target)
            if num_idx < len(matrix[0]) and matrix[idx][num_idx] == target:
                flag = True

        return flag

 

방법2

  • row = 0, col = 행렬의 가장 마지막 행
  • 만약 target 이 행렬[row][col]의 값과 같으면 true 반환한다.
  • target이 행렬[row][col]의 값보다 작으면 col의 위치를 위로 올려준다.
  • target이 행렬[row][col]의 값보다 크다면 row의 위치를 오른쪽으로 올려준다.
        row = 0
        col = len(matrix[0]) -1
        
        while row <= len(matrix)-1 and col >= 0:
            if target == matrix[row][col]:
                return True
            elif target < matrix[row][col]:
                col -= 1
            elif target > matrix[row][col]:
                row += 1
        return False