BOJ/๐Ÿ…

โ˜…์ •๋ ฌ ์ตœ์ƒ๊ธ‰1 - 1๋ฌธ์ œ()โ˜…

metamong 2023. 2. 7.

๐Ÿ… ํ”Œ๋ž˜ํ‹ฐ๋„˜ ์ด์ƒ์˜ ๋‚œ์ด๋„๋Š” ๊ฐ ๋ฌธ์ œ์˜ ์ ‘๊ทผ๋ฐฉํ–ฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‚ฌ๊ณ ๊ณผ์ • ํ๋ฆ„๊นŒ์ง€ ์ตœ๋Œ€ํ•œ ๋ฆฌ๋งˆ์ธ๋“œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ธฐ์–ตํ•˜์ž!

 

๐Ÿ… ์ •๋ ฌ๊ด€๋ จ ํฌ์ŠคํŒ… ํ•˜๋‹จ ์ฐธ์กฐ

 

๐Ÿ… ์ •๋ ฌ์—๋Š” ์ •๋ง ๋งŽ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค. ํ”Œ๋ž˜์ด์ƒ์˜ ๋‚œ์ด๋„๊ธ‰ ๋ฌธ์ œ์—์„œ ์ •๋ ฌ์„ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ์ง€ ์•Œ์•„๋ณด์ž


โ˜… 2220 ํž™ ์ •๋ ฌ โ˜…

 

import math
n = int(input())
if n==1:print(1)
elif n==2:print(2,1)
elif n==3:print(3,2,1)
else:
    arr = [3,2,1]
    for i in range(n-3):
        end=int(math.log(i+3,2))
        idx=len(arr)-1
        for _ in range(end):
            arr[idx],arr[(idx-1)//2]=arr[(idx-1)//2],arr[idx]
            idx=(idx-1)//2
        arr[0]=(i+4)
        arr.append(1)

    print(*arr)

 

๐Ÿคน heapify() ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ง„ํ–‰๋˜๋Š” swap ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€๋กœ ํ•˜๋Š” heap์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ.

 

๐Ÿคน ์ผ๋‹จ heapsort์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” $O(nlogn)$์ด๋ฉฐ, heapsort๋ž€, binary heap์ด๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ, ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๋งค๋ฒˆ heapify()๋งˆ๋‹ค ๋นผ๊ณ  ์ œ์ณ๋‘” ๋’ค, ๋งจ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋กœ ๋‹ค์‹œ ์˜ฌ๋ ค ๋‹ค์‹œ heapify()๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” sorting์ด๋‹ค.

 

(ํ•˜๋‹จ heapsort ํฌ์ŠคํŒ… ์ฐธ์กฐ)

 

๐Ÿคน ์ด ๋•Œ, heapify()์—์„œ heap ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด parent node ๊ธฐ์ค€, ๋‘ ์ž์‹ node์™€ ๋Œ€์†Œ๋น„๊ต๋ฅผ ํ•˜๋Š” ๊ณผ์ •์ด ์žˆ๋‹ค. ์ด ๋•Œ, heap์˜ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด swap์ด ์ง„ํ–‰๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ดˆ๊ธฐ์— ์–ด๋–ป๊ฒŒ heap ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด swap ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ ๊ด€๊ฑด.

 

๐Ÿคน * ์žฌ๊ท€์ ์œผ๋กœ ์ ‘๊ทผ

ex) ์ตœ๋Œ€ swap ํšŸ์ˆ˜๊ฐ€ ๋‚˜์˜ค๋Š”, ์˜ˆ์‹œ๋กœ ๋“  n=6์ผ ๋•Œ์˜ ์ดˆ๊ธฐ heap ๊ตฌ์กฐ๋Š” [6, 5, 3, 2, 4, 1]์ด๋‹ค. ์ด๋ฅผ heapify()ํ•˜๋Š” ๊ณผ์ •์„ ์ผ์ผ์ด ์‚ดํŽด๋ณธ๋‹ค๋ฉด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™๋‹ค.

 

โ€ป swap ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, ๋ถ€๋ชจ์™€ ์ž์‹๊ฐ„์˜ ๋น„๊ต์—ฐ์‚ฐ์—์„œ ๋ฌด์กฐ๊ฑด swap์ด ์ง„ํ–‰๋˜๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ตœ์ข… 1๋งŒ ๋‚จ์„ ๋•Œ ๊นŒ์ง€ ๋ชจ๋“  ๊ณผ์ •์„ ํ•ด๋ถ€ํ•˜๋ฉด, comparison ๊ณผ์ • ์ œ์™ธ 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ max-heap snapshot์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ณง 1๋ถ€ํ„ฐ 5๊นŒ์ง€์˜ ์ตœ๋Œ€ swap ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” heapify() ๊ณผ์ •๋„ ํฌํ•จ(์žฌ๊ท€)๋˜์–ด ์žˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

→ ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฑฐ๊พธ๋กœ, n=3([3,2,1]) ๊ณผ์ •๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค๋ฉด, ๊ฐ€์žฅ ๋์˜ ์›์†Œ 1์„ ํ•œ ์ธต ์˜ฌ๋ผ๊ฐ€๋ฉฐ swapํ•˜๊ณ , ์ตœ์ƒ๋‹จ node๋ฅผ 1๋กœ ๋”ํ•œ ๊ฒฐ๊ณผ์ธ 4๋ฅผ ๋„ฃ๊ณ , ๋์˜ ์ž๋ฆฌ์— 1์„ ์ถ”๊ฐ€ํ•œ๋‹ค. / n=4์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ๊ฐ’์€ 2์ด๋ฏ€๋กœ heap์˜ ๋†’์ด๊ฐ€ 2๋กœ ์ฆ๊ฐ€. ๊ฐ ๋†’์ด๋ณ„๋กœ ๋ชจ๋‘ swap๋˜๊ฒŒ๋”, ๋ฐฉ๊ธˆ ์ถ”๊ฐ€ํ•œ 1์„ ์ตœ์ƒ๋‹จ node๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋ฉฐ swap. ์•ž์„œ ํ•œ ๊ฒฐ๊ณผ์™€ ๋˜‘๊ฐ™์ด 1๋กœ ๋”ํ•œ ๊ฒฐ๊ณผ์ธ 5๋ฅผ ์ตœ์ข… 1์˜ ์ž๋ฆฌ์ธ ์ตœ์ƒ๋‹จ node์— ๋„ฃ๊ณ , ๋งˆ์ง€๋ง‰์— 1 ์ถ”๊ฐ€. / ์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ์ œ์ผ ์ตœ์†Ÿ๊ฐ’ 1์„ ๊ฐ€์ง€๊ณ  ์›€์ง์ด๋ฏ€๋กœ ๋ชจ๋“  height๋ณ„ swap์ด ์ง„ํ–‰๋˜๊ณ , ์ด๋Š” ๊ณง ๋ชจ๋“  height๋ณ„๋กœ ๋ฌด์กฐ๊ฑด swap์ด ์ผ์–ด๋‚˜๊ธฐ์— swap ํšŸ์ˆ˜๊ฐ€ ์ตœ๋Œ€๊ฐ€ ๋จ์„ ๋œปํ•˜๋ฉฐ, ์ตœ์ข… swap ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์›ํ•˜๋Š” n ๊ฐœ์ˆ˜์˜ heap์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค!

 

โ€ป ์žฌ๊ท€์ ์œผ๋กœ ์ ‘๊ทผํ•ด heapify() ๊ณผ์ •์„ ํ’€์–ด ์ดํ•ดํ•˜๊ณ , ๊ฑฐ๊พธ๋กœ ๋‹ค์‹œ ์˜ฌ๋ผ๊ฐ€๋ฉฐ heap์„ ์ƒ์„ฑํ•˜๋Š” ํ๋ฆ„ (heapsort ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฑฐ๊พธ๋กœ) โ€ป

 

→ ์ฝ”๋“œ ๋ถ„์„)

โ‘   ์ฃผ์–ด์ง„ ๋†’์ด๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€์•ผ ํ•˜๋ฏ€๋กœ, $\lfloor \log_2 (i+3) \rfloor$๊นŒ์ง€ swap๊ณผ์ • ์ง„ํ–‰

โ‘ก python(first index 0) ๊ธฐ์ค€, ์ž์‹ node(idx)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ–ˆ์„ ๋•Œ ๋ถ€๋ชจ node์˜ index๋Š” $\lfloor \cfrac{(idx-1)}{2} \rfloor$. ๋”ฐ๋ผ์„œ ๋‘ ๊ฐœ์˜ index์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ๋ฅผ ์„œ๋กœ swap. ์ดํ›„ idx update

 

Binary heap

๐Ÿ‘จ‍๐Ÿซ ์šฐ์„ ์ˆœ์œ„ ํ๋Š” max-heap ๋˜๋Š” min-heap์„ ์‚ฌ์šฉํ•ด ์šฐ์„ ์ˆœ์œ„์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž„์„ ๊ณต๋ถ€ํ–ˆ๋‹ค. (์•„๋ž˜ ํฌ์ŠคํŒ… ์ฐธ์กฐ) priority queue - (binary) heap tree 1. concepts> โ˜๏ธ ์šฐ์„ ์ˆœ์œ„ ํ

sh-avid-learner.tistory.com

โ‘ข ๋งˆ๋ฌด๋ฆฌ๋กœ append(1)๋กœ ๋งจ ๋์— 1์„ ์ถ”๊ฐ€ํ•˜๊ณ , ์ฒซ ๋ฒˆ์งธ ์›์†Œ(heap ์ตœ์ƒ๋‹จ)๋กœ ๊ธฐ์กด ๋ฐฐ์—ด ์ตœ๋Œ“๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’ ์ถ”๊ฐ€


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'BOJ > ๐Ÿ…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

โ˜…DP Expert(Easy) I - 4 Solvedโ˜…  (0) 2024.01.07

๋Œ“๊ธ€