GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 1654번 파이썬

gogi masidda 2022. 9. 14. 22:29

문제 링크
https://www.acmicpc.net/problem/1654

1654번: 랜선 자르기

첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그

www.acmicpc.net


start를 1, end를 lan 배열에서 가장 긴 길이로 하였다.
amount와 목표로 하는 개수 N이 같아지면, start와 end의 값이 같아지게 된다.
만약 52cm를 두개로 자르려 할 때, 25cm도 2개, 26cm도 2개이다. 이 문제는 최대 길이를 출력하는 것이므로, end를 결과로 출력해야 한다.

정답 코드

import sys

K, N = map(int, sys.stdin.readline().split())
lan = []
for i in range(K):
  lan.append(int(sys.stdin.readline()))

start, end = 1, max(lan)
while start <= end:
  mid = (start + end) // 2
  amount = 0
  for l in lan:
    amount += l // mid
  if amount >= N:
    start = mid + 1
  else:
    end = mid - 1

print(end)

728x90