ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] ๋ฐฑ์ค€ 19638 ์„ผํ‹ฐ์™€ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜ (Heapq)
    ๐Ÿ’ป Algorithm/Python 2022. 7. 2. 15:16

     

    ๐Ÿ“Œ ๋ฌธ์ œ

    ์„ผํ‹ฐ๋Š” ๋งˆ๋ฒ• ๋„๊ตฌ๋“ค์„ ์ง€๋‹ˆ๊ณ  ์—ฌํ–‰์„ ๋– ๋‚˜๋Š” ๊ฒƒ์ด ์ทจ๋ฏธ์ธ ์•…๋‹น์ด๋‹ค.

     

    ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์— ๋„์ฐฉํ•œ ์„ผํ‹ฐ๋Š” ์ž์‹ ๋ณด๋‹ค ํ‚ค๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฑฐ์ธ๋“ค์ด ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค.

     

    ์„ผํ‹ฐ๊ฐ€ ๊บผ๋‚ด ๋“ค์€ ๋งˆ๋ฒ• ๋„๊ตฌ๋Š” ๋ฐ”๋กœ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋กœ, ์ด ๋ฟ…๋ง์น˜์— ๋งž์€ ์‚ฌ๋žŒ์˜ ํ‚ค๊ฐ€ ⌊ ๋ฟ…๋ง์น˜์— ๋งž์€ ์‚ฌ๋žŒ์˜ ํ‚ค / 2 ⌋๋กœ ๋ณ€ํ•˜๋Š” ๋งˆ๋ฒ• ๋„๊ตฌ์ด๋‹ค. ๋‹จ, ํ‚ค๊ฐ€ 1์ธ ๊ฒฝ์šฐ ๋” ์ค„์–ด๋“ค ์ˆ˜๊ฐ€ ์—†์–ด ๋ฟ…๋ง์น˜์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

     

    ํ•˜์ง€๋งŒ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋Š” ํšŸ์ˆ˜ ์ œํ•œ์ด ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์„ผํ‹ฐ๋Š” ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ „๋žต์„ ์ˆ˜๋ฆฝํ–ˆ๋‹ค. ๋ฐ”๋กœ ๋งค๋ฒˆ ๊ฐ€์žฅ ํ‚ค๊ฐ€ ํฐ ๊ฑฐ์ธ ๊ฐ€์šด๋ฐ ํ•˜๋‚˜๋ฅผ ๋•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

     

    ๊ณผ์—ฐ ์„ผํ‹ฐ๊ฐ€ ์ˆ˜๋ฆฝํ•œ ์ „๋žต์— ๋งž๊ฒŒ ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์˜ ๋ชจ๋“  ๊ฑฐ์ธ์ด ์„ผํ‹ฐ๋ณด๋‹ค ํ‚ค๊ฐ€ ์ž‘๋„๋ก ํ•  ์ˆ˜ ์žˆ์„๊นŒ?

    ์ž…๋ ฅ

    ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ์„ผํ‹ฐ๋ฅผ ์ œ์™ธํ•œ ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์˜ ์ธ๊ตฌ์ˆ˜ N (1 ≤ N ≤ 105)๊ณผ ์„ผํ‹ฐ์˜ ํ‚ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ Hcenti (1 ≤ Hcenti ≤ 2 × 109), ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜์˜ ํšŸ์ˆ˜ ์ œํ•œ T (1 ≤ T ≤ 105)๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค.

     

    ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๊ฐ ๊ฑฐ์ธ์˜ ํ‚ค๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜ H (1 ≤ H ≤ 2 × 109)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

    ์ถœ๋ ฅ

    ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋ฅผ ์„ผํ‹ฐ์˜ ์ „๋žต๋Œ€๋กœ ์ด์šฉํ•˜์—ฌ ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์˜ ๋ชจ๋“  ๊ฑฐ์ธ์ด ์„ผํ‹ฐ๋ณด๋‹ค ํ‚ค๊ฐ€ ์ž‘๋„๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์ค„์— YES๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ค„์— ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋ฅผ ์ตœ์†Œ๋กœ ์‚ฌ์šฉํ•œ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

     

    ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜๋ฅผ ์„ผํ‹ฐ์˜ ์ „๋žต๋Œ€๋กœ ๋‚จ์€ ํšŸ์ˆ˜ ์ „๋ถ€ ์ด์šฉํ•˜๊ณ ๋„ ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์—์„œ ์„ผํ‹ฐ๋ณด๋‹ค ํ‚ค๊ฐ€ ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฑฐ์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ์ฒซ ๋ฒˆ์งธ ์ค„์— NO๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ค„์— ๋งˆ๋ฒ•์˜ ๋ฟ…๋ง์น˜ ์‚ฌ์šฉ ์ดํ›„ ๊ฑฐ์ธ์˜ ๋‚˜๋ผ์—์„œ ํ‚ค๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฑฐ์ธ์˜ ํ‚ค๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

    ์˜ˆ์ œ ์ž…๋ ฅ 1

    1 10 1
    20

    ์˜ˆ์ œ ์ถœ๋ ฅ 1

    NO
    10

    ์˜ˆ์ œ ์ž…๋ ฅ 2

    2 10 3
    16
    32

    ์˜ˆ์ œ ์ถœ๋ ฅ 2

    YES
    3

    ์˜ˆ์ œ ์ž…๋ ฅ 3

    2 10 3
    127
    8

    ์˜ˆ์ œ ์ถœ๋ ฅ 3

    NO
    15

    ์˜ˆ์ œ ์ž…๋ ฅ 4

    1 1 100000
    1

    ์˜ˆ์ œ ์ถœ๋ ฅ 4

    NO
    1

     


     

    ๐Ÿ“Œ ํ’€์ด

    import sys, heapq
    input = sys.stdin.readline
    
    n, h, t = map(int, input().split())
    giants = [-int(input()) for _ in range(n)]
    heapq.heapify(giants)
    cnt = 0
    
    for i in range(t):
        if -giants[0] == 1 or -giants[0] < h:
            break
        else:
            heapq.heapreplace(giants, -(-giants[0] // 2))
            cnt += 1
    
    if -giants[0] >= h:
        print('NO', -giants[0], sep='\n')
    else:
        print('YES', cnt, sep='\n')

    ์ฒ˜์Œ์— ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ํ’€์—ˆ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์„œ(^_ใ… ) heapq๋กœ ํ‘ผ ์ฝ”๋“œ!
    ์šฐ๋ฆฌ์˜ ๋ชฉ์ ์€ ๋ชจ๋“  ๊ฑฐ์ธ์˜ ํ‚ค๋ฅผ ์„ผํ‹ฐ๋ณด๋‹ค ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ
    ํ‚ค๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฑฐ์ธ๋ถ€ํ„ฐ ๋ฟ…๋ง์น˜๋ฅผ ๋•Œ๋ ค์ฃผ๋‹ค๊ฐ€ ์„ผํ‹ฐ๋ณด๋‹ค ์ž‘์€ ๊ฑฐ์ธ์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ๋ฟ…๋ง์น˜์งˆ์„ ๋ฉˆ์ถฐ์ฃผ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

     

    heapq

    ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ํ ๋ชจ๋“ˆ. ์˜ค๋ฆ„์ฐจ์ˆœ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

     

    giants = [1, 2, 3, 4, 5, 6]
    
    heapq.heapify(giants)
    // ๋ฆฌ์ŠคํŠธ giants๋ฅผ ํž™์œผ๋กœ ๋ณ€ํ™˜
    
    heapq.heappush(giants, 7)
    // ํ•ด๋‹น ํž™(giants)์— ์›์†Œ 7์„ ํ‘ธ์‹œ
    
    heapq.heappop(giants)
    // ํ•ด๋‹น ํž™(giants)์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ํŒ
    
    heapq.heapreplace(giants, 7)
    // ํ•ด๋‹น ํž™(giants)์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ํŒํ•œ ํ›„ ์›์†Œ 7์„ ํ‘ธ์‹œ
    
    heaqp.heappushpop(giants, 7)
    // ํ•ด๋‹น ํž™(giants)์— ์›์†Œ 7์„ ํ‘ธ์‹œํ•œ ํ›„ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ํŒ

     

    ๊ฑฐ์ธ๋“ค์˜ ํ‚ค๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์ด ์•„๋‹Œ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํž™์— ํ‘ธ์‹œํ•  ๋•Œ๋Š” -1์„ ๊ณฑํ•ด์„œ ํ‘ธ์‹œํ•˜๊ณ , ํŒํ•  ๋•Œ ์—ญ์‹œ ๋ฐ˜ํ™˜๋œ ์›์†Œ์— -1์„ ๊ณฑํ•ด์„œ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

     

    (ex. ๊ฑฐ์ธ์˜ ํ‚ค๊ฐ€ 16, 32, 24๋ผ๊ณ  ํ•ด ๋ด…์‹œ๋‹ค. ํž™์— -16, -32, -24๋กœ ํ‘ธ์‹œํ•˜๋ฉด ํŒํ•  ๋•Œ๋‚˜ giant[0]์— ์ ‘๊ทผํ•  ๋•Œ ๊ฐ€์žฅ ์ž‘์€ -32๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์— -1์„ ๊ณฑํ•ด์„œ 32๋กœ ๋งŒ๋“ค๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์—ฐ์‚ฐ(์„ผํ‹ฐ์˜ ํ‚ค์™€ ๋น„๊ต, ํ‚ค ๋ฐ˜๋™๊ฐ• ๋“ฑ)์„ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.)

     

    1. for๋ฌธ์€ ๋ฟ…๋ง์น˜ ํšŸ์ˆ˜๋งŒํผ ๋Œ๋ฆฝ๋‹ˆ๋‹ค.
    2. ํ˜„์žฌ ๊ฐ€์žฅ ํฐ ๊ฑฐ์ธ์˜ ํ‚ค๊ฐ€ 1์ด๋ฉด ๋ฟ…๋ง์น˜๋ฅผ ๋•Œ๋ฆด ์ˆ˜ ์—†๊ณ , ์„ผํ‹ฐ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์ž„๋ฌด๋ฅผ ์™„์ˆ˜ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๋”์ด์ƒ ๋ฟ…๋ง์น˜๋ฅผ ๋•Œ๋ฆฌ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. → break
    3. ํ˜„์žฌ ๊ฐ€์žฅ ํฐ ๊ฑฐ์ธ์˜ ํ‚ค๊ฐ€ ์„ผํ‹ฐ๋ณด๋‹ค ํฌ๋‹ค๋ฉด popํ•˜๊ณ  ๋ฟ…๋ง์น˜๋กœ ํ‚ค๋ฅผ ๋ฐ˜๋™๊ฐ• ๋‚ด pushํ•ฉ๋‹ˆ๋‹ค.

     

    ๋Œ“๊ธ€

Designed by Tistory.