-
๐ ๋ฌธ์
์ผํฐ๋ ๋ง๋ฒ ๋๊ตฌ๋ค์ ์ง๋๊ณ ์ฌํ์ ๋ ๋๋ ๊ฒ์ด ์ทจ๋ฏธ์ธ ์ ๋น์ด๋ค.
๊ฑฐ์ธ์ ๋๋ผ์ ๋์ฐฉํ ์ผํฐ๋ ์์ ๋ณด๋ค ํค๊ฐ ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฑฐ์ธ๋ค์ด ์๋ค๋ ์ฌ์ค์ด ๋ง์์ ๋ค์ง ์์๋ค.
์ผํฐ๊ฐ ๊บผ๋ด ๋ค์ ๋ง๋ฒ ๋๊ตฌ๋ ๋ฐ๋ก ๋ง๋ฒ์ ๋ฟ ๋ง์น๋ก, ์ด ๋ฟ ๋ง์น์ ๋ง์ ์ฌ๋์ ํค๊ฐ ⌊ ๋ฟ ๋ง์น์ ๋ง์ ์ฌ๋์ ํค / 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๋ก ๋ง๋ค๊ณ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฐ์ฐ(์ผํฐ์ ํค์ ๋น๊ต, ํค ๋ฐ๋๊ฐ ๋ฑ)์ ์งํํ๋ฉด ๋ฉ๋๋ค.)
- for๋ฌธ์ ๋ฟ ๋ง์น ํ์๋งํผ ๋๋ฆฝ๋๋ค.
- ํ์ฌ ๊ฐ์ฅ ํฐ ๊ฑฐ์ธ์ ํค๊ฐ 1์ด๋ฉด ๋ฟ ๋ง์น๋ฅผ ๋๋ฆด ์ ์๊ณ , ์ผํฐ๋ณด๋ค ์๋ค๋ฉด ์๋ฌด๋ฅผ ์์ํ ๊ฒ์ด๋ฏ๋ก ๋์ด์ ๋ฟ ๋ง์น๋ฅผ ๋๋ฆฌ์ง ์์๋ ๋ฉ๋๋ค. → break
- ํ์ฌ ๊ฐ์ฅ ํฐ ๊ฑฐ์ธ์ ํค๊ฐ ์ผํฐ๋ณด๋ค ํฌ๋ค๋ฉด popํ๊ณ ๋ฟ ๋ง์น๋ก ํค๋ฅผ ๋ฐ๋๊ฐ ๋ด pushํฉ๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 19583 ์ธ์ด๋ฒ๊ฐ๊ฐ์ดํ (Set) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2594 ๋์ด๊ณต์ (๊ตฌํ) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2841 ์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ (Stack) (0) 2022.07.02 [Python] ๋ฐฑ์ค 16165 ๊ฑธ๊ทธ๋ฃน ๋ง์คํฐ ์ค์์ด (Dictionary) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (Deque) (0) 2022.07.02