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
- 99클럽
- 뷰
- 오블완
- 파이썬
- ML
- flutter getx
- 백준
- C++
- 코딩테스트
- vue
- c++ 코테
- til
- 코딩테스트준비
- 개발자 취업
- 항해99
- 코테
- Python
- 개발자취업
- 안드로이드
- 파이썬 코테
- react
- 라라벨
- 코테 파이썬
- 티스토리챌린지
- Laravel
- 코딩테스트 준비
- 플러터
- Flutter
- 알고리즘
- DP
Archives
- Today
- Total
잡다로그
[99클럽 코테 스터디] 12일차 TIL - 이분탐색, Count Negative Numbers in a Sorted Matrix 본문
Algorithm
[99클럽 코테 스터디] 12일차 TIL - 이분탐색, Count Negative Numbers in a Sorted Matrix
날으는다람쥐 2024. 6. 12. 01:30[12일차] 이분탐색
문제: https://leetcode.com/problems/count-negative-numbers-in-a-sorted-matrix/description/

* 대충 번역: 행과 열이 모두 내림차순으로 정렬된 m*n 행렬인 grid가 주어질 때, grid의 음수를 모두 반환하라.
Solution
정렬된 행렬에서 원소를 찾기 위해서 이진탐색을 활용할 수 있다.
행과 열이 모두 내림차순 정렬되어 있으므로, 오른쪽 위 모서리에서 시작하여 왼쪽 아래로 이동하며 전체를 순회하지 않고도 원하는 원소를 찾을 수 있다. 즉 오른쪽 위 모서리(출발)에서 오른쪽 또는 아래로만 이동하며 원하는 원소를 찾는 방법이다.
이는 이진 탐색의 핵심 아이디어인 "검색 범위를 효율적으로 줄여 나가는" 것이기 때문에, 이진 탐색 알고리즘을 적용한다고 볼 수 있다.
class Solution(object):
def countNegatives(self, grid):
row_count = len(grid)
col_count = len(grid[0])
result = 0
# 맨 오른쪽 위에서 시작하여 왼쪽 아래로 이동
row = 0
col = col_count - 1
while row < row_count and col >= 0:
if grid[row][col] < 0:
# 이 열의 아래 모든 행은 음수
result += row_count - row
col -= 1
else:
row += 1
return result
* 출처: chatgpt
나다어
나는 음수 원소 밑과 옆(오른쪽)으로는 전부 음수라는, 정답과 같은 아이디어를 떠올리기는 했는데 구현하는 과정에서 꼬여버렸다. 풀다 살짝 졸아버린 것은 안 비밀 ,,
# 틀린 코드
class Solution(object):
def countNegatives(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
# 내림차순이므로
# 0 미만인 순간부터 쭉이다.
# m - (0미만인덱스)
m = 0 # len(grid) - 1
n = len(grid[0]) - 1
idx = len(grid)-1
result = 0
for col in range(len(grid)):
for row in range(n):
if grid[col][row] < 0:
n = row - 1
result += idx - row
break
return result
나와 하단의 정답 코드의 반복 부분이 동일한 것으로 보아 아이디어는 같았음을 알 수 있다. 그러나 나는 순회 방법으로 for문을, 정답은 while문을 사용하며 정확성에서 차이가 생긴 것 같다.
- 이중 for문이 복잡해진다면 while문을 사용해보자. 최종 구현에 사용하지 않더라도 간결하게 아이디어를 찾을 수 있다.
'Algorithm' 카테고리의 다른 글
| [99클럽 코테 스터디] 14일차 TIL - 그래프, Minimum Number of Moves to Seat Everyone (0) | 2024.06.13 |
|---|---|
| [99클럽 코테 스터디] 13일차 TIL - 그래프, Find Center of Star Graph (0) | 2024.06.13 |
| [99클럽 코테 스터디] 11일차 TIL - 이분탐색, Search Insert Position (0) | 2024.06.10 |
| [99클럽 코테 스터디] 10일차 TIL - 동적계획법, Divisor Game (0) | 2024.06.09 |
| [99클럽 코테 스터디] 9일차 TIL - 동적계획법, Fibonacci Number (0) | 2024.06.08 |
Comments