728x90
SMALL
문제
https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
풀이
적절한 값을 찾을때까지 이진 탐색을 수행하여 랜선의 최대 길이를 반복해서 조정하면 된다
큰 탐색범위를 보면 가장 먼저 이진탐색을 떠올려야한다!
import sys
K,N =map(int,sys.stdin.readline().split(' '))
LAN=[]
for _ in range(K) :
LAN.append(int(sys.stdin.readline()))
start=1
end=max(LAN)
while(start<=end): #이진탐색
mid=(start+end)//2
result=0
for i in LAN:
result+=(i//mid)
if result>=N:
start=mid+1
else :
end=mid-1
print(end)
😎주의
파이썬의 몫 연산자 //를 사용해야함
마지막에 start가 아닌 end를 출력해야함(start가 end보다 커졌을때 이진탐색을 종료하기때문)
728x90
LIST
'코테공부 > python 백준' 카테고리의 다른 글
파이썬 백준 2805번: 나무 자르기 (0) | 2024.03.29 |
---|---|
파이썬 백준 2512번: 예산 (0) | 2024.03.29 |
파이썬 백준 10799번: 쇠막대기 (0) | 2024.03.27 |
파이썬 백준 1406번: 에디터 (0) | 2024.03.27 |
파이썬 백준 11286번 : 절댓값 힙 (0) | 2024.03.27 |