Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 릿코드
- 파이썬 알고리즘
- 파이썬 프로그래머스
- 파이썬 알고리즘 풀기
- 파이썬 릿코드
- python 릿코드
- 릿코드풀이
- 파이썬알고리즘풀기
- python xor
- python 알고리즘
- 릿코드풀기
- 릿코드 풀기
- 알고리즘풀이
- 잇츠디모
- binary search
- 코틀린기초
- 알고리즘풀기
- python Leetcode
- leetcode풀이
- 파이썬릿코드풀기
- LeetCode
- leetcode풀기
- python sorted
- leetcode 풀기
- python priority queue
- python zip_longest
- 릿코드 파이썬
- 파이썬릿코드
- 파이썬알고리즘
- 상가수익률계산기
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 1351. Count Negative Numbers in a Sorted Matrix 본문
반응형
1351. Count Negative Numbers in a Sorted Matrix
https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/
문제)
솔루션1) - brute force
이중 for 문을 통해서 0보다 작은 number를 셉니다.
시간 복잡도 : O(m x n)
class Solution:
def countNegatives(self, grid: List[List[int]]) -> int:
return sum([num < 0 for nums in grid for num in nums])
솔루션2)
오른쪽 상단에서 부터 negative number를 row를 이동시키면서 negative number를 찾습니다.
negative number를 찾으면 최대 row- - 현재 row를 하면 negative number 수가 나옵니다.
여기서 다시 컬럼을 왼쪽으로 이동하면서 이를 반복합니다. 솔루션1 보다는 연산량을 줄일 수 있을 것 같습니다.
그러나 최악의 경우 여전히 시간 복잡도는 O(m x n) 입니다
class Solution:
def countNegatives(self, grid: List[List[int]]) -> int:
# 우측 상단에서 부턴 negative number 수를 센다
max_row = len(grid)
max_col = len(grid[0])
row = 0
col = max_col -1
negative_count = 0
while (row < max_row) and col >= 0:
if grid[row][col] < 0:
negative_count += max_row - row
col -= 1
else:
row += 1
return negative_count
솔루션3) - binary search
grid의 각 row에 대해서 바이너리 서치를 적용해서 negative number 수를 찾습니다.
# binary search
class Solution:
def countNegatives(self, grid: List[List[int]]) -> int:
max_col = len(grid[0])
def binary_search(arr, low, high):
while low <= high:
mid = (low + high) // 2
if arr[mid] >= 0:
low = mid + 1
else:
high = mid - 1
return low
# 음수 카운팅 변수
negative_num_count = 0
# 그리드의 각 row를 순회
for row in grid:
# 바이너리 서치 탐색을 이용해서 음수가 시작되는 idx 위치 획득
start_negative_num_idx = binary_search(row, 0, max_col-1)
negative_num_count += max_col - start_negative_num_idx
return negative_num_count
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 938. Range Sum of BST (0) | 2021.11.24 |
---|---|
LeetCode 풀기 - 450. Delete Node in a BST (0) | 2021.11.24 |
LeetCode 풀기 - 1002. Find Common Characters (0) | 2021.11.23 |
LeetCode 풀기 - 1812. Determine Color of a Chessboard Square (0) | 2021.11.21 |
LeetCode 풀기 - 1436. Destination City (0) | 2021.11.21 |
Comments