λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’κ³΅λΆ€/μ•Œκ³ λ¦¬μ¦˜

[λ°±μ€€] 1654번 λžœμ„  자λ₯΄κΈ°

by rindev 2020. 11. 20.

λžœμ„ μ„ μ™œ 자λ₯΄λ‹ˆ μ–˜λ“€μ•„..

 

www.acmicpc.net/problem/1654

 

1654번: λžœμ„  자λ₯΄κΈ°

첫째 μ€„μ—λŠ” μ˜€μ˜μ‹μ΄ 이미 가지고 μžˆλŠ” λžœμ„ μ˜ 개수 K, 그리고 ν•„μš”ν•œ λžœμ„ μ˜ 개수 N이 μž…λ ₯λœλ‹€. KλŠ” 1이상 10,000μ΄ν•˜μ˜ μ •μˆ˜μ΄κ³ , N은 1이상 1,000,000μ΄ν•˜μ˜ μ •μˆ˜μ΄λ‹€. 그리고 항상 K ≦ N 이닀. κ·Έ

www.acmicpc.net

 

λ‚œ 아직... μ΄λΆ„νƒμƒ‰μ˜ while νƒˆμΆœ 쑰건을 아직 잘 λͺ» μž‘λŠ”λ‹€.................γ… γ…  μ–Έμ œμ―€ μ΅μˆ™ν•΄μ§ˆκΉŒ.. μ–΄μ¨Œλ“ 

 

맨 μ²˜μŒμ— ν–ˆλ˜ 생각은 μ΅œμ’… λ‹΅μ•ˆμ΄λž‘ 거의 λΉ„μŠ·ν•œλ° 반볡 쑰건을 λͺ»μž‘κ³  ν—€λ§Έλ‹€.

μŠ€ν„°λ””μ—μ„œ 닀같이 μ–˜κΈ°ν•˜λ‹€κ°€ μ§‘μ—μ„œ ν’€μ–΄λ³΄κΈ°λ‘œν•˜κ³  μ§‘μ—μ™”λŠ”λ° κ°€λ¬Όκ°€λ¬Ό,,γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹γ…‹

μ•”νŠΌ λ‘λ²ˆμ§Έ 생각은 κ·Έλž˜μ„œ 0λΆ€ν„° κ°€μž₯ μ§§μ€λžœμ„ κΉŒμ§€λ₯Ό λ²”μœ„λ‘œ μƒκ°ν–ˆλ‹€.

 

κ·Έλ¦Όκ³Ό 같은 이유둜 κ°€μž₯ μž‘μ€κ±Έ κΈ°μ€€μœΌλ‘œ 자λ₯΄λ©΄.. 될거라고 μƒκ°ν–ˆλ‹€. μ‹€μ œλ‘œ μž…λ ₯μ˜ˆμ œλŠ” μ €λ ‡κ²Œ 풀어도 λ™μž‘ν•¨.

 

 

근데!!!!!!!!!!!!!!!!!!!!! μ΄λ ‡κ²Œ min이 κ·Ήλ‹¨μ μœΌλ‘œ 짧은 κ²½μš°λŠ” μ–˜κΈ°κ°€ λ‹€λ₯΄λ‹€...

N=4μ΄λ―€λ‘œ 4개의 길이가 λ˜‘κ°™μ€ λžœμ„ μ„ λ§Œλ“€κ³ μ‹Άμ€λ°, μƒλ‹¨μ²˜λŸΌ κ°€μž₯ 짧은것에 맞좘 것 보닀

밑에 그림처럼 λ‹€λ₯Έ 선에 기쀀을 λ§žμΆ”κ³ , κ·Έκ±Έ λ‘λ²ˆ 자λ₯Έκ²Œ 더 κΈ΄ 것을 μ•Œ 수 μžˆλ‹€.

자λ₯Έ κ°―μˆ˜κ°€ 6κ°œκ°€ 돼도 상관 μ—†λ‹€. λ¬Έμ œμ— κ·Έλ ‡κ²Œ μ¨μžˆμœΌλ‹ˆκΉŒ..

μ•”νŠΌ λ²”μœ„λ₯Ό λ°”κΏ”μ•Ό ν•œλ‹€...γ… γ…  이걸 λͺ¨λ₯΄κ³  μ™œν‹€λ Έμ§€ μ™œν‹€λ Έμ§€ ν•˜λ©΄μ„œ μ΄μƒν•œλ° 계속 κ³ μΉ˜κ³ μžˆμ—ˆμŒ

λ²”μœ„λŠ” λžœμ„  길이의 max μ΄μƒμœΌλ‘œλŠ” κΈΈμ–΄μ§ˆ 수 μ—†μœΌλ―€λ‘œ, maxλ₯Ό κΈ°μ€€μœΌλ‘œ μž‘μ•„μ„œ 자λ₯΄κΈ° μ‹œμž‘ν•¨.

 

  # 1654번 : λžœμ„ μžλ₯΄κΈ°
def binary_search_1654():
  k, n = map(int, input().split())
  lan_wires = []
  for _ in range(k):
    lan_wires.append(int(input()))

  # k, n = 4, 11
  # lan_wires = [802, 743, 457, 539]

  longest = max(lan_wires)

  left = 1
  right = longest
  result = 0

  while left <= right :
    center = (left + right) // 2
    # print('center=====', center)
    hap = 0

    for cm in lan_wires:
      hap += cm // center #μͺΌκ°  λžœμ„ μ˜ 갯수의 ν•©
    
    if hap < n:
      right = center -1 #길이λ₯Ό μž‘κ²Œλ§Œλ“€μ–΄μ„œ κ°―μˆ˜κ°€ λŠ˜μ–΄λ‚˜κ²Œ
    elif hap >= n :
      if center > result :
        result = center 
      left = center +1 #길이λ₯Ό ν‚€μ›Œμ„œ κ°―μˆ˜κ°€ μ€„μ–΄λ“€κ²Œ

  print(result)
  

 

 

 

 

λŒ“κΈ€