1. 입국심사 (Lv. 3)
# 입국심사
def solution(n, times):
answer = 0
times.sort()
left, right = 1, max(times)*n
while left <= right:
mid = (left+right)//2
temp = 0
for time in times:
temp += mid // time
if temp >= n:
answer = mid
right = mid - 1
elif temp < n:
left = mid + 1
return answer
right = max(times)*n : 가장 긴시간으로 n명이 입국심사를 했을 때가 최댓값
이분탐색 실시
- mid : 걸린 총 시간
- temp : 해당 시간 안에 입국 심사를 할 수 있는 사람의 수
- temp == n 을 목표로 이분탐색을 진행
2. 징검다리 (Lv. 4)
# 징검다리
def solution(distance, rocks, n):
answer = 0
rocks.sort()
start, end = 1, distance
while start <= end:
mid = (start + end) // 2
temp = 0
other_rock = 0
for rock in rocks:
if rock - other_rock < mid:
temp += 1
else:
other_rock = rock
if temp > n:
end = mid - 1
elif temp <= n:
answer = mid
start = mid + 1
return answer
바위 사이 거리의 최솟값중 가장 큰값을 구해야 하는 문제
right = distance : 도착지점이 최댓값
이분탐색 실시
- mid : 바위사이 거리의 최솟값
- temp : 제거해야 할 바위의 수
- temp == n 을 목표로 이분탐색을 진행
이분탐색이 약점인데 결국 풀이를 보고야 말았다.
각 바위 사이의 거리를 구하기 위한 계산식의 풀이를 봤다.
현재 생각하고 있는 거리의 최솟값(mid) 보다 크다면 해당 바위를 other_rock에 할당해 줘야 했다.
일주일 후에 복습하기 위해 플래너에 기입해놨다.
'Algorithm > 프로그래머스 고득점 Kit' 카테고리의 다른 글
[프로그래머스] 고득점Kit (10) - 그래프 (파이썬) (0) | 2022.03.13 |
---|---|
[프로그래머스] 고득점Kit (8) - DFS/BFS (파이썬) (0) | 2022.03.11 |
[프로그래머스] 고득점Kit (7) - 동적계획법 (파이썬) (0) | 2022.03.10 |
[프로그래머스] 고득점Kit (6) - 그리디(2) (파이썬) (0) | 2022.03.09 |
[프로그래머스] 고득점Kit (6) - 그리디(1) (파이썬) (0) | 2022.03.05 |