:)
[백준] 놀이공원 본문
https://www.acmicpc.net/problem/1561
1561번: 놀이 공원
첫째 줄에 N(1 ≤ N ≤ 2,000,000,000)과 M(1 ≤ M ≤ 10,000)이 빈칸을 사이에 두고 주어진다. 둘째 줄에는 각 놀이기구의 운행 시간을 나타내는 M개의 자연수가 순서대로 주어진다. 운행 시간은 1 이상 30
www.acmicpc.net
이분탐색
import sys
def solution(n,m,time):
def get_prev_time_list(time,mid):
prev_time = mid - 1
total = m
for t in time:
total += prev_time // t
return total
left = min(time)
right = max(time) * n
ans = right
mid = right
if n <=m:
return n
while left<=right:
total = m
mid = (left+right) // 2
for t in time:
total += mid//t
if total >= n:
right = mid - 1
ans = mid
break
else:
if total < n:
left = mid +1
prev_total= get_prev_time_list(time, ans)
# print(prev_total)
answer = 0
for idx in range(m):
if ans % time[idx] == 0:
prev_total += 1
if prev_total == n:
answer = idx+1
break
return answer
n,m = map(int, sys.stdin.readline().split())
time = [*map(int, sys.stdin.readline().split())]
print(solution(n,m,time))
'Algorithm(python)' 카테고리의 다른 글
[백준] Moo 게임, [백준] 샤워실 바닥 깔기 (0) | 2023.01.31 |
---|---|
[백준] 색종이 만들기, [백준] 1학년, [백준] 동전1 (0) | 2023.01.16 |
[백준]대표선수, [백준]입국심사 (0) | 2022.11.01 |
[프로그래머스]주차 요금 계산 (1) | 2022.10.15 |
[백준]겹치는 건 싫어, [백준]회전초밥 (0) | 2022.10.09 |
Comments