Post

leetcode(리트코드)2월23일 challenge240-Search a 2D Matrix II

leetcode(리트코드)2월23일 challenge240-Search a 2D Matrix II

leetcode February 240 - Search a 2D Matrix II 문제입니다.

1. 문제

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


2. Input , Output


3. 분류 및 난이도

Medium 난이도입니다.
2월23일자 챌린지 문제입니다.


4. 문제 해석

  • 오름차순이 되어 있는 2차원 배열을 돌면서 target값을 효율성있게 찾아야합니다.
  • STL 에서 find 함수를 지원하지만 find 함수는 순차접근으로 계산하기에 효율성이 좋은 코드는 아닙니다.
  • BinarySearch를 이용해서 위의 코드를 개선하였습니다.

5. code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public:

    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        for(size_t i =0;i<matrix.size();++i)
        {
            auto finditem = binary_search(matrix[i].begin(),matrix[i].end(),target);
            if(finditem)
                return true;
        }
        return false;
        
        
    }
};

6. 결과 및 후기, 개선점

시간이 빠른 코드 12ms(100%)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
    bool searchMatrix(vector<vector<int>>& a, int target) {
        ios::sync_with_stdio(0);
        //h는 배열의 행 w는 열
        int h = 0, w = a[0].size(), x;
        while(h < a.size() && w && (x = a[h][w-1]) != target) {
            if (x > target) w--;
            else h++;
        }
        //while문은 기존 코드에 있으나 지워도 상관없어서 지워버림.
        //while (a.size()) a.pop_back();
        return x == target;
    }
};

일단 열의 끝 부터 검사하면서 그 다음 행을 검사합니다.

This post is licensed under CC BY 4.0 by the author.