File tree Expand file tree Collapse file tree 1 file changed +49
-0
lines changed
Expand file tree Collapse file tree 1 file changed +49
-0
lines changed Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments