๋ด ์ฝ๋
def find(lans, n,h,m):
high = h
min = m
mid = (high + min)//2
while min <= high:
sum = 0
for lan in lans:
sum += lan//mid
if sum >= n:
min = mid + 1
elif sum < n:
high = mid - 1
mid = (high + min)//2
return mid
from sys import stdin
k, n = map(int,stdin.readline().split())
lans = []
for i in range(k):
lans.append(int(input()))
high = max(lans)
min = 1
mid1 = find(lans,n,high,min)
print(mid1)
์ฒ์ ์์ฑํ ์ฝ๋
k,n = map(int,input().split())
lans = []
for i in range(k):
lans.append(int(input()))
max = 1
sum = [0]
while True:
sum.append(0)
for lan in lans:
sum[max] += (lan//max)
if sum[max] == 0:
break
max += 1
a = 0
for i in range(max):
if (a < i) & (sum[i] >= n):
a = i
print(a)
์ ์ ์กฐ์ฌ๋ก ํ์ด๋ณด๋ ค ํ์ง๋ง... ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์๊ฐ ์ด๊ณผ๊ฐ ๋๋ ์ด์ ๋ฅผ ์์ฒญ ํค๋งค๊ณ , ์ฝ๋ ์์ ๋ ๋ง์ด ํด๋ดค์ง๋ง ํด๊ฒฐ์ด ๋์ง ์์ ๊ฒฐ๊ตญ ๊ตฌ๊ธ๋ง ํ๋ค.
๋ฐฉ๋ฒ์ ์ด์ง ํ์์ ์ฌ์ฉํ๋ ๊ฒ์ด์๋ค.
์ด์ง ํ์ ์ฝ๋
k,n = map(int,input().split())
lans = []
for i in range(k):
lans.append(int(input()))
mid = max(lans)//2
high = max(lans)
min = 0
while True:
sum = 0
for lan in lans:
sum += lan//mid
if n == sum:
break
elif sum > n:
min = mid + 1
mid = (high + min)//2
else:
high = mid - 1
mid = (high + min)//2
if min > high:
n += 1
mid = max(lans)//2
high = max(lans)
min = 0
print(mid - 1)
๋ถ๋ช ์ด์ง ํ์์ ํตํด ์๊ฐ์ด๊ณผ๋ ํด๊ฒฐํ์ผ๋.. ์ด์งํ์์ ํตํด ๋์ค๋ ๊ฒฐ๊ด๊ฐ์ด ์ต๋๊ฐ์ด ์๋์๋ค.
์ต๋๊ฐ์ ์ฐพ๊ธฐ ์ํด, ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ผ๋..
k,n = map(int,input().split())
lans = []
lansum = 0
for i in range(k):
lans.append(int(input()))
mid = max(lans)//2
high = max(lans)
min = 0
while True:
sum = 0
for lan in lans:
sum += lan//mid
if n == sum:
break
elif sum > n:
min = mid + 1
mid = (high + min)//2
else:
high = mid - 1
mid = (high + min)//2
if min > high:
n += 1
mid = max(lans)//2
high = max(lans)
min = 0
while True:
sum = 0
for lan in lans:
sum += lan//mid
if n == sum:
mid += 1
else:
break
print(mid - 1)
๋๋ค์ ์๊ฐ ์ด๊ณผ ๋ฐ์... ๋ค์ ์ต๋๊ฐ์ ๊ตฌํ๋ ์ฝ๋๋ฅผ ์ง๋ฉด์ ์์ฒญ๋ ์ฝ์ง์ ํ ๊ฒฐ๊ณผ
๋ค์๊ณผ ๊ฐ์ ๋๋ฌ์ด ์ฝ๋๊ฐ ํ์ํ๋ค..
def find(lans, n,h,m,l):
low = l
high = h
min = m
mid = (high + min)//2
while True:
sum = 0
for lan in lans:
sum += lan//mid
if sum == n:
break
elif sum > n:
min = mid + 1
elif sum < n:
high = mid - 1
if min > high:
if low == False:
n += 1
else:
n -= 1
high = h
min = m
mid = (high + min)//2
return mid,n
k,n = map(int,input().split())
lans = []
for i in range(k):
lans.append(int(input()))
if k == n:
print(lans[0])
exit(0)
high = max(lans)
min = 0
mid1,n1 = find(lans,n,high,min,False)
mid2,n2 = find(lans,n-1,high,min,True)
while True:
mid3,n3 = find(lans,n,mid2,mid1,False)
if mid1 == mid3:
break
if n3 == n1:
mid1 = mid3
print(mid1)
๋ฌผ๋ก ์ด ์ฝ๋๋ก๋ ์๊ฐ์ด๊ณผ ๋ฌธ์ ๋ ํด๊ฒฐ์ด ๋์ง ์์๊ณ .. ๊ฒฐ๊ตญ ๊ตฌ๊ธ๋ง์ ํตํด ๋ฌธ์ ๋ฅผ ํ์๋ค.
์ด ๋ฌธ์ ๋ฅผ ํ๋ฉฐ ์ป์ ๊ตํ์..
3์๊ฐ ์ด์ ํฌ์ํด๋ ๋ฌธ์ ๊ฐ ์ ํ๋ฆฌ๋ฉด ํ๋ฃจ ๊ฐ๊ฒฉ์ ๋๊ณ ํ์ด๋ณด๊ณ ,
์ฝ๋๊ฐ ๋๋ฌด ๋ณต์กํด์ง๋ค๊ณ ๋๋ผ๋ฉด ๋ค์ ์๊ฐํด์ผ๊ฒ ๋ค.