๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Algorithm/BOJ

[BOJ] ๋žœ์„  ์ž๋ฅด๊ธฐ

 

 

๋‚˜์˜ ์ฝ”๋“œ 

 

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