정리
백준 1654번: 랜선 자르기 본문
백준 1654번: 랜선 자르기
1654번: 랜선 자르기
집에서 시간을 보내던 오영식은 박성원의 부름을 받고 급히 달려왔다. 박성원이 캠프 때 쓸 N개의 랜선을 만들어야 하는데 너무 바빠서 영식이에게 도움을 청했다.
www.acmicpc.net

- 1789번: 수들의 합 문제와 매우 유사한 문제이다. 마찬가지로 이분탐색으로 접근하면 된다.
- start = 0, end = 2147483648(2^31 - 1) 으로 초기화한다. start가 end보다 작거나 같을 때까지 while문을 돌린다
- mid = (start + end) // 2
- rep은 각 랜선을 mid 길이만큼 잘랐을 때 나오는 랜선의 개수이다. for문을 통해서 long 리스트에 저장된 랜선들을 mid로 나눴을 때의 몫을 구한다
- rep이 n보다 크거나 같으면 mid가 작다는 것을 의미하므로 start = mid + 1 을 한다
- rep이 n보다 작으면 mid가 크다는 것을 의미하므로 end = mid - 1을 한다
아래는 파이썬 코드이다
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
k, n = map(int, sys.stdin.readline().split()) | |
long = [] | |
for _ in range(k): | |
long.append(int(sys.stdin.readline())) | |
start = 0 | |
end = 2147483648 | |
while start <= end: | |
mid = (start + end) // 2 | |
rep = 0 | |
for _ in range(k): | |
rep += long[_] // mid | |
if rep >= n: | |
start = mid + 1 | |
else: | |
end = mid - 1 | |
print(start - 1) |
'Programming > 백준 BOJ' 카테고리의 다른 글
백준 1339번: 단어 수학 (0) | 2021.01.11 |
---|---|
백준 1251번: 단어 나누기 (0) | 2021.01.11 |
백준 1789번: 수들의 합 (0) | 2020.12.25 |
백준 2493번: 탑 (0) | 2020.10.12 |
백준 14488번: 준오는 급식충이야!! (0) | 2020.09.30 |
Comments