알고리즘

[LeetCode] 74 Search a 2D Matrix JavaScript

2022. 7. 20. 13:52

문제 링크

 

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

 

문제 유형

2차원 배열

 

문제 풀이

이 문제는 정렬된 2차원 m x n 배열내에 target이 있으면 true, 없으면 false를 반환하는 문제이다.
정렬된 1차원 배열을 먼저 생각해보자. 정렬된 1차원 배열에서 어떤 값을 탐색할 때 이진 탐색을 이용하면 O(log n)의 시간복잡도로 문제 해결이 가능하다.
문제에서 주어지는 2차원 매트릭스는 각 행, 열의 숫자들이 모두 오름차순으로 정렬되어 있는 것을 알 수 있다. 따라서 주어진 2차원 배열을 정렬된 1차원 배열로 만들 수 있고, 1차원 배열에 이진 탐색을 수행하면서 2차원 배열의 인덱스와 매칭시키면서 target 값이 있는지 확인하면 된다.


다음과 같은 2차원 매트릭스가 주어졌다고 하자. 이를 1차원 배열로 만들고, high 포인터가 low 포인터를 역전할 때까지 target 값을 찾는 과정을 반복한다.

첫 중간값 인덱스는 5이다. 1차원 배열을 열의 개수만큼씩 자르면 2차원 배열이 나온다. 따라서 현재 인덱스에서 열의 개수를 나누면 행의 위치가 나오고, 현재 인덱스에서 열의 개수를 나눴을 때의 나머지가 열의 위치가 된다. 중간값의 2차원 배열에서의 위치를 구하고 그 값을 target과 비교한다.

11은 타겟값 3보다 크므로 탐색할 지점을 중간값보다 작은 범위로 옮기고, 위의 과정을 또 반복한다.

5는 타겟값 3보다 크므로 탐색할 지점을 중간값보다 작은 범위로 옮기고, 위의 과정을 또 반복한다. 중간값은 target값과 같으므로 true를 반환한다. 만약, 이진 탐색 과정이 끝났는데도 target값이 없으면 false를 반환한다.

 

코드

var searchMatrix = function(matrix, target) {
    const row = matrix.length, col = matrix[0].length;
    let low = 0, high = row * col - 1;
    
    // 2차원 배열을 1차원 배열이라고 생각하고 이진 탐색 수행
    while (low <= high) {
        const mid = Math.floor((low + high) / 2);
        const num = matrix[Math.floor(mid / col)][mid % col];
        
        if (num === target) return true;
        else if (num > target) high = mid - 1;
        else low = mid + 1;
    }
    return false;
};

 

참고

https://www.youtube.com/watch?v=4-y6eGUY-sI

'알고리즘' 카테고리의 다른 글

[LeetCode] 49 Group Anagrams JavaScript  (0) 2022.07.23
[LeetCode] 415 Add Strings JavaScript  (0) 2022.07.22
[LeetCode] 48 Rotate Image JavaScript  (0) 2022.07.19
[LeetCode] 287 Find the Duplicate Number JavaScript  (0) 2022.07.18
[LeetCode] 581 Shortest Unsorted Continuous Subarray JavaScript  (0) 2022.07.18
'알고리즘' 카테고리의 다른 글
  • [LeetCode] 49 Group Anagrams JavaScript
  • [LeetCode] 415 Add Strings JavaScript
  • [LeetCode] 48 Rotate Image JavaScript
  • [LeetCode] 287 Find the Duplicate Number JavaScript
sandwe
sandwe
sandwe
sandwe
sandwe
전체
오늘
어제
  • 분류 전체보기 (69)
    • CSS (1)
    • 알고리즘 (35)
    • JavaScript (30)
      • 모던 자바스크립트 Deep Dive (30)
    • React (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스프레드 문법
  • string
  • 렌더링 과정
  • javascript
  • 투 포인터
  • 해쉬 맵
  • BFS
  • 프로토타입
  • 백준
  • React Query
  • Leetcode
  • 클로저
  • 스택
  • 알고리즘
  • float
  • Subsets
  • map
  • 프로그래머스
  • 이진 탐색
  • 해시 테이블
  • Error Boundary
  • 표준 빌트인 객체
  • 이터러블
  • Suspense
  • dfs
  • 정렬
  • 다이나믹 프로그래밍
  • 구조 분해 할당
  • 선언적
  • 백트래킹

최근 댓글

최근 글

hELLO · Designed By 정상우.
sandwe
[LeetCode] 74 Search a 2D Matrix JavaScript
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.