일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- iterator
- kaggle
- Python Implementation
- Python
- Protocol
- t1
- LeetCode
- 315. Count of Smaller Numbers After Self
- Decorator
- Class
- attribute
- 밴픽
- 프로그래머스
- shiba
- Substring with Concatenation of All Words
- Python Code
- 715. Range Module
- 컴퓨터의 구조
- 109. Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- Regular Expression
- 30. Substring with Concatenation of All Words
- 파이썬
- 43. Multiply Strings
- concurrency
- Generator
- DWG
- 운영체제
- data science
- 시바견
Archives
- Today
- Total
Scribbling
프로그래머스: 징검다리 본문
개인적으론 매우 어려웠던 문제이다.
Binary Search를 이용하라는 힌트가 있음에도 풀지 못하였다.
처음 떠올렸던 방식은 O(N**2)이었는데 N이 너무 커서 안될것 같았다.
이래저래 Binary Search를 적용할 방안을 떠올려보았지만, 끝까지 생각이 나지 않아 구글링을 해따...
아이디어는 매우 간단하다.
--> 돌 사이의 간격에 대해 binary search를 하면된다.
효율성은 O(log(D)*N)이므로 최선의 알고리즘이다.
def solution(distance, rocks, n):
answer = -1
rocks.sort()
rocks.append(distance)
l, r = 0, distance
while l <= r:
mid = (l + r) // 2
num_removed = 0
prev = 0
for rock in rocks:
dist = rock - prev
if dist >= mid:
prev = rock
else:
num_removed += 1
if num_removed <= n:
answer = max(answer, mid)
l = mid + 1
else:
r = mid - 1
return answer
'Computer Science > Coding Test' 카테고리의 다른 글
LeetCode: 120. Triangle (0) | 2021.11.03 |
---|---|
LeetCode: 117. Populating Next Right Pointers in Each Node II (0) | 2021.11.03 |
프로그래머스: 입국심사 (0) | 2021.11.02 |
LeetCode: 116. Populating Next Right Pointers in Each Node (0) | 2021.11.02 |
LeetCode: 114. Flatten Binary Tree to Linked List (0) | 2021.11.02 |