๋์ ์ฝ๋
a,b = map(int,input().split())
arr = [int(input()) for _ in range(a)]
k = 1
ans = []
while True:
imp = []
for num in arr:
t = num // k
imp.append(t)
k += 1
if sum(imp) == b:
break
while True:
ans = []
k += 1
for num in arr:
ans.append(num//k)
if ans != imp:
break
print(k-1)
๋ถ์ > ์๊ฐ์ด๊ณผ ๋ ๊ฒ์ ์๊ณ ์์์ง๋ง, ํจ์จ์ฑ์ ์ ์ธํ๊ณ ์ผ๋จ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๊ธฐ ์ํด์ ํ์ด๋ณด์๋ค. ๋น์ฐํ ๊ฒฐ๊ณผ๋ ์๊ฐ์ด๊ณผ.
ํด์ค ์ฝ๋
a,b = map(int,input().split())
arr = [int(input()) for _ in range(a)]
# ์ด๋ถํ์์ ์ํ ์ฒ์ ์์น์ ๋ ์์น ์ง์
start,end = 1,max(arr)
while start <= end:
mid = (start+end)//2
# ์ ์ ๊ฐ์
cnt = 0
for i in arr:
cnt += i//mid
# ์ต์ข
๋์ ์ ๊ฐ์๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ๋์ ์ ๊ฐ์๋ณด๋ค ํด ๋
if cnt >= b:
start = mid + 1
# ์ต์ข
๋์ ์ ๊ฐ์๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ๋์ ์ ๊ฐ์๋ณด๋ค ์์ ๋
else:
end = mid - 1
print(end)
๋ถ์ > ์ด๋ฒ ๋ฌธ์ ๋ฅผ ํตํด ์ด๋ถํ์์ด๋ผ๋ ๊ฐ๋ ์ ์๋กญ๊ฒ ์๊ฒ ๋์๋ค. ์ด๋ถํ์์ด๋ ๊ฐ๋จํ ๋งํ๋ฉด, ์๋ฃ๋ฅผ ๋๋ก ๋๋์ด ํ์ํ๋ ๊ฒ์ด๋ค. ์ฑ ์ ์๋ก ๋ค๋ฉด, ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ํ์ด์ง๊ฐ 124์ชฝ์ธ๋ฐ ๋ด๊ฐ ์๋ฌด๋ ๊ฒ๋ ํด๋ณธ ์ฑ ํ์ด์ง๊ฐ 66์ชฝ์ด๋ผ๋ฉด 66์ชฝ๋ณด๋ค ๋ค์ ์๋ ์์ด๋ค๋ง ํ์ํด์ 124์ชฝ์ ์ฐพ์๋ด๋ ๊ฒ์ด๋ค. ์ด ๋ฌธ์ ๋ํ ์ฒ์์ start ๊ฐ๊ณผ end ๊ฐ์ ๊ฐ๊ฐ 1๊ณผ max(arr)๋ก ์ง์ ํด๋ ๋ค์ ์ด์ ์ ๋ฐ ๊ฐ์ mid๋ก ์ง์ ํ๊ณ ๋ฐฐ์ด ๋ด ๊ฐ์ mid๋ก ๋๋ ๊ฐ์ ๋ชจ๋ ๋ํ ์ต์ข ๋์ ์ ๊ฐ์๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ๋์ ์ ๊ฐ์๋ณด๋ค ํฌ๋ฉด mid๋ฅผ ๋ ํฌ๊ฒ ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ start๊ฐ์ mid + 1๋ก ๋ฐ๊พธ๊ณ , ๊ทธ ์ธ์๋ end๊ฐ์ mid - 1๋ก ๋ฐ๊พธ์ด mid ํฌ๊ธฐ๋ฅผ ์ค์ฌ ์ต์ข ๋์ ์ ๊ฐ์๊ฐ ์ปค์ง๊ฒ ๋ง๋ค์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค. ์ด๋ถ ํ์์ ๊ณ์ฐ ๋ณต์ก๋๋ O(logn) ์ด๋ค.
1654๋ฒ: ๋์ ์๋ฅด๊ธฐ
์ฒซ์งธ ์ค์๋ ์ค์์์ด ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๋์ ์ ๊ฐ์ K, ๊ทธ๋ฆฌ๊ณ ํ์ํ ๋์ ์ ๊ฐ์ N์ด ์ ๋ ฅ๋๋ค. K๋ 1์ด์ 10,000์ดํ์ ์ ์์ด๊ณ , N์ 1์ด์ 1,000,000์ดํ์ ์ ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํญ์ K โฆ N ์ด๋ค. ๊ทธ
www.acmicpc.net
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฃ๋ณด์ก (0) | 2022.05.21 |
---|---|
[BOJ] ๋น์ทํ ๋จ์ด (0) | 2022.05.18 |
[BOJ] ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด (0) | 2022.05.13 |
[BOJ] ์ฌ๋ฆผํฝ (0) | 2022.05.13 |
[BOJ] ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด (0) | 2022.05.13 |