일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- S3
- slicing [::-1]
- ds_store
- pandas
- OS
- selenium-wire
- Python
- r-string
- 코딩 테스트
- reverse v.s. reversed
- blinker
- 함수형 프로그래밍
- CI/CD
- functools.wraps
- timestamp
- 순수함수
- sort(reverse=True) v.s. reverse
- boto3
- os.path
- PIP
- [초급(예비) 개발자 오픈소스 실무 역량강화 교육]
- 쿼리
- 생각
- Airflow
- 고차함수
- decorator
- sort v.s. sorted
Archives
- Today
- Total
공부일지
[코딩 테스트] Python을 통해 알아보는 이진탐색과 비트연산자 본문
백준 문제 다른 분 풀이를 참고하는 중에 이진 탐색을 이용해서 푸는 법을 알게 됐다.
(백준 문제 참고 링크: https://www.acmicpc.net/problem/2292)
이진 탐색 관련 코드
def fn(t):
...
def solve(n):
result = 0
l, r = 0, 100000
while l <= r:
mid = (l + r) >> 1
if fn(mid) >= n:
result = mid
r = mid - 1
else:
l = mid + 1
return result + 1
이진 탐색 알고리즘이 중요한 부분이라 fn 함수에 대해서는 자세한 내용은 생략한다.
mid = (l + r) >> 1
중간에 보면 위와 같은 코드가 있는데 이것이 비트연산자(>>)를 이용한 방식이다.
아래 코드와 같은 역할이다(나누기 2와 같다는 뜻).
mid = (l + r) // 2
이진 탐색에 비트 연산자를 쓰는 이유
1. (과거)
/ 나 // 보다 비트 연산자를 쓰면 경과시간이 더 빠르다는 이유 때문.
요새 Python에서는 성능 차이가 거의 없다시피 해서 //를 써도 좋다.
C/C++에는 차이가 있다고 한다.
2. (근래)
이진 탐색 관용구라 한다. 많이 쓰다보니 계속 쓰는?
결론
그냥 알아두자.
'Computer > Coding Tests' 카테고리의 다른 글
[코딩테스트]Python의 리스트의 얕은 복사를 통해 알아보는 참조문제 (0) | 2025.03.29 |
---|---|
[코딩 테스트]Python을 이용한 BFS, DFS 구현 방법(반복문, 재귀)(인접행렬, 인접 리스트) (0) | 2025.03.27 |
[코딩 테스트]BFS로 보는 [Bool] v.s. [Node], visited 배열 쓸 때와 result 배열만 쓸 때의 차이(서로 관련 있음) (0) | 2025.03.26 |
[코딩 테스트]시간 재는 모듈 time v.s. timeit 차이 (0) | 2025.03.21 |
[코딩 테스트]정렬 문제로 알아보는 Python 자료구조 비교(tuple, namedtuple, struct, class +__slots__) (0) | 2025.03.21 |