ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๋ฐฑ์ค€] 3079 ์ž…๊ตญ์‹ฌ์‚ฌ with Python
    PS 2022. 7. 14. 20:36
    728x90
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“Œ BOJ 3079 ์ž…๊ตญ์‹ฌ์‚ฌ

    ๐Ÿ’ก ์กฐ๊ฑด

    1. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์˜ค์ŠคํŠธ๋ ˆ์ผ๋ฆฌ์•„๋กœ ์—ฌํ–‰์„ ๋– ๋‚ฌ๋‹ค. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ์ด M๋ช…์ด๊ณ , ์ง€๊ธˆ ๊ณตํ•ญ์—์„œ ํ•œ ์ค„๋กœ ์„œ์„œ ์ž…๊ตญ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.
      (1 โ‰ค N โ‰ค 100,000, 1 โ‰ค M โ‰ค 1,000,000,000)
    1. ์ž…๊ตญ์‹ฌ์‚ฌ๋Œ€๋Š” ์ด N๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๊ฐ ์ž…๊ตญ์‹ฌ์‚ฌ๊ด€์ด ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ์‚ฌ๋žŒ๋งˆ๋‹ค ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค.
      k๋ฒˆ ์‹ฌ์‚ฌ๋Œ€์— ์•‰์•„์žˆ๋Š” ์‹ฌ์‚ฌ๊ด€์ด ํ•œ ๋ช…์„ ์‹ฌ์‚ฌ๋ฅผ ํ•˜๋Š”๋ฐ ๋“œ๋Š” ์‹œ๊ฐ„์€ Tk์ด๋‹ค.
      (1 โ‰ค Tk โ‰ค 109)
    1. ๊ฐ€์žฅ ์ฒ˜์Œ์— ๋ชจ๋“  ์‹ฌ์‚ฌ๋Œ€๋Š” ๋น„์–ด์žˆ๊ณ , ์‹ฌ์‚ฌ๋ฅผ ํ•  ์ค€๋น„๋ฅผ ๋ชจ๋‘ ๋๋ƒˆ๋‹ค. ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ๋น„ํ–‰๊ธฐ ํ•˜๋‚˜๋ฅผ ์ „์„ธ๋‚ด๊ณ  ๋†€๋Ÿฌ๊ฐ”๊ธฐ ๋•Œ๋ฌธ์—,
      ์ง€๊ธˆ ์‹ฌ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ชจ๋‘ ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด๋‹ค. ํ•œ ์‹ฌ์‚ฌ๋Œ€์—์„œ๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์‚ฌ๋žŒ๋งŒ ์‹ฌ์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    1. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์€ ๋ชจ๋‘ ์ปดํ“จํ„ฐ ๊ณตํ•™๊ณผ ํ•™์ƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์–ด๋–ป๊ฒŒ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์œผ๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ตœ์†Œ๊ฐ€ ๋ ์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.
    1. ์ƒ๊ทผ์ด์™€ ์นœ๊ตฌ๋“ค์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.
    1. ์ด๋ถ„ํƒ์ƒ‰ ์œ ํ˜•์˜ ๋ฌธ์ œ

    ๐Ÿ–ฅ ์†Œ์Šค ์ฝ”๋“œ

    from sys import stdin
    
    n, m = map(int, stdin.readline().split())
    arr = [int(stdin.readline()) for _ in range(n)]
    
    l, r = min(arr), max(arr) * m
    ans = r
    
    while l <= r:
        total = 0
        mid = (l + r) // 2
    
        for i in range(n):
            total += mid // arr[i]
    
        if total >= m:
            r = mid -1
            ans = min(mid, ans)
    
        else:
            l = mid + 1
    
    print(ans)

    ๐Ÿ”– ์˜ˆ์ œ ๋ฐ ์‹คํ–‰๊ฒฐ๊ณผ

    ์˜ˆ์ œ

    7 10
    3
    8
    3
    6
    9
    2
    4

    ์‹คํ–‰๊ฒฐ๊ณผ

    8

    โŒจ๏ธ ๋ฌธ์ œ ํ’€์ด

    1. ๊ทธ๋ฆฌ๋”” ํ˜น์€ ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๊ฒŒ๋˜๋ฉด, ์ธ์› ์ˆ˜ M ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ 10์–ต์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ์‹œ๊ฐ„์ดˆ๊ณผ๋กœ ํ‹€๋ฆฌ๊ฒŒ ๋œ๋‹ค.
    1. ์ด๋ถ„ํƒ์ƒ‰์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผํ•˜๋Š”๋ฐ, ์‹ฌ์‚ฌ๋Œ€์—์„œ ํ•œ๋ช…์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š” ์ตœ์†Œ ์‹œ๊ฐ„์„ l,
      ์‹ฌ์‚ฌ๋Œ€์—์„œ m ๋ช…์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š” ์ตœ๋Œ€ ์‹œ๊ฐ„์„ r ๋กœ ์ •ํ•œ๋‹ค.
      ์ด์— ๋”ฐ๋ผ l = min(arr), r = max(arr) * m ์ด ๋œ๋‹ค.
    1. ์ด๋ถ„ํƒ์ƒ‰์„ ์œ„ํ•ด while ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์กฐ๊ฑด์€ l ์ด r๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ๋งŒ ๋ฐ˜๋ณต์ด๋‹ค.
      m ๋ช…์ด ์‹ฌ์‚ฌ๋ฅผ ๋ชจ๋‘ ๋ฐ›๋Š” ์‹œ๊ฐ„์„ mid๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, mid = (l + r) // 2 ์ด๋‹ค.
      ์ด mid ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ ์‹œ๊ฐ„์„ ๊ตฌํ•œ๋‹ค.
    1. n ๊ฐœ์˜ ์‹ฌ์‚ฌ๋Œ€์˜ ์ •๋ณด๊ฐ€ ์žˆ๋Š” arr ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒ(i)ํ•˜๋ฉด์„œ, mid ์‹œ๊ฐ„์— i ๋ฒˆ ์‹ฌ์‚ฌ๋Œ€์—์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ธ์›์„ total ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค.
    1. arr ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ–ˆ๋‹ค๋ฉด, total ๊ฐ’๊ณผ m์˜ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋ชจ๋“  ์ธ์›์ด ์‹ฌ์‚ฌ๋Œ€์—์„œ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      ์—ฌ๊ธฐ์„œ total ๊ฐ’์ด m ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ๋ชจ๋“  ์ธ์›์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒƒ์ด๋ฏ€๋กœ, l ์„ mid + 1 ๋กœ ๊ฐฑ์‹ ํ•œ๋‹ค.
    1. (5) ๋ฒˆ์˜ ์กฐ๊ฑด์—์„œ total ๊ฐ’์ด m ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋ชจ๋“  ์ธ์›์ด ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›์„ ์ถฉ๋ถ„ํ•œ ์‹œ๊ฐ„์ธ ๊ฒƒ์ด๋‹ค.
      mid ๊ฐ’๊ณผ answer ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋” ์ž‘์€ ๊ฐ’์„ answer ๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•œ ๋’ค,
      r ์„ mid - 1๋กœ ๊ฐฑ์‹ ํ•˜์—ฌ m ๋ช…์ด ๋ชจ๋‘ ์‹ฌ์‚ฌ๋ฅผ ๋ฐ›๋Š” ๋” ์ž‘์€ ์ตœ์†Œ ์‹œ๊ฐ„์ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.