Skip to content

Commit 2235669

Browse files
committed
#31 : 1654_랜선 자르기
1 parent d578f03 commit 2235669

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
#2023-05-25-Week7-과제
2+
#1654_랜선 자르기
3+
4+
'''
5+
가지고 있는 K개의 랜선을 잘라서
6+
N개의 같은 길이 랜선으로 만들기
7+
-> K=300일 때 N의 길이가 140이면 N=2, 20은 버려짐
8+
9+
기존 K개의 랜선으로 N개를 만들 수는 없음
10+
자를 때는 정수 단위로만 자름
11+
12+
N개보다 많이 만드는 것도 N개를 만드는 것에 포함
13+
14+
15+
입력 1 : 이미 가지고 있는 K개, 필요한 랜선 N개
16+
(1<=K<=10000 1<=N<=1000000 K<=N)
17+
입력 2 : 이미 가지고 있는 K개의 랜선 각 길이
18+
19+
랜선의 길이는 자연수<=2^31 -1
20+
21+
출력 : N개를 만들 수 있는 랜선의 최대 길이
22+
'''
23+
24+
25+
import sys
26+
K, N = map(int, sys.stdin.readline().split())
27+
28+
array = []
29+
30+
for i in range(K):
31+
array.append(int(sys.stdin.readline()))
32+
33+
start = 1 # 최소 1
34+
end = max(array) # 최대
35+
36+
while (start <= end): # 이분탐색
37+
# --> start와 end가 동일하면 탈출 = 최대 랜선 길이 발견
38+
mid = (start + end) // 2 # 중간 지점 값
39+
cnt = 0 # 랜선 개수 0
40+
for i in range(K) :
41+
cnt += array[i] // mid # 랜선을 중간 값으로 나누어 개수 파악
42+
if cnt >= N : # 랜선 개수가 목표 이상 = 중간 기준으로 오른쪽 탐색
43+
start = mid + 1
44+
else : # 랜선 개수가 목표 미만 = 중간 기준으로 왼쪽 탐색
45+
end = mid - 1
46+
47+
print(end)
48+
49+

0 commit comments

Comments
 (0)