ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

1654๋ฒˆ: ๋žœ์„  ์ž๋ฅด๊ธฐ

์ฒซ์งธ ์ค„์—๋Š” ์˜ค์˜์‹์ด ์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ K, ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋žœ์„ ์˜ ๊ฐœ์ˆ˜ N์ด ์ž…๋ ฅ๋œ๋‹ค. K๋Š” 1์ด์ƒ 10,000์ดํ•˜์˜ ์ •์ˆ˜์ด๊ณ , N์€ 1์ด์ƒ 1,000,000์ดํ•˜์˜ ์ •์ˆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ K โ‰ฆ N ์ด๋‹ค. ๊ทธ

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 K๊ฐœ์˜ ๋žœ์„ ์ด ์žˆ์„ ๋•Œ, N๊ฐœ์˜ ๋žœ์„ ์„ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ ๋žœ์„ ์˜ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ์˜ ๋ถ„๋ฅ˜์™€ ๊ฐ™์ด, ์ด๋ถ„ ํƒ์ƒ‰์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  • ์ด๋ถ„ ํƒ์ƒ‰์€ start, mid, end๋ฅผ ํ†ตํ•ด ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ชฉํ‘œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • start 1, end๋Š” ๊ฐ€์žฅ ๊ธด ๋žœ์„ ์˜ ๊ธธ์ด๋กœ ์ง€์ •ํ•œ๋‹ค.
    • mid = (start + end) // 2
    • ์ฃผ์–ด์ง„ ๋žœ์„ ๋“ค์„ mid๋กœ ๋‚˜๋ˆ„๊ณ  ์ด๋ฅผ ํ•ฉํ•œ๋‹ค.
    • ํ•ฉ์‚ฐํ•œ ๊ฒฐ๊ณผ๊ฐ€ N๊ณผ ๋น„๊ตํ•˜์—ฌ ํฌ๋‹ค๋ฉด ํƒ์ƒ‰ ๋ฒ”์œ„์ธ s๋ฅผ 1 ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์ž‘๋‹ค๋ฉด e๋ฅผ 1 ๊ฐ์†Œ์‹œํ‚จ๋‹ค.
  • ์œ„์™€ ๊ฐ™์€ ๋กœ์ง์„ ๋” ์ด์ƒ ๋ฐ˜๋ณตํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๋ฉด, ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin


if __name__ == '__main__':
    k, n = map(int, stdin.readline().split())
    lan_cables = [int(stdin.readline()) for _ in range(k)]
    s, e = 1, max(lan_cables)

    while s <= e:
        m = (s + e) // 2
        make_line = sum([line // m for line in lan_cables])

        if make_line >= n:
            s = m + 1
        else:
            e = m - 1

    print(e)
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€