Algorithm

[Algorithm] ํ—ˆํ”„๋งŒ ์••์ถ•

yevdev 2021. 10. 13. 11:52

๐Ÿ’กํ—ˆํ”„๋งŒ ์••์ถ• ์•„์ด๋””์–ด

  • ํŒŒ์ผ์— ๋นˆ๋ฒˆํžˆ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž -> ์งง์€ ์ด์ง„์ฝ”๋“œ ํ• ๋‹น
  • ๋“œ๋ฌผ๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ž -> ๊ธด ์ด์ง„์ฝ”๋“œ ํ• ๋‹น

 

๐Ÿ’ก์ ‘๋‘๋ถ€ ํŠน์„ฑ (prefixx property)

  • ํ—ˆํ”„๋งŒ ์••์ถ•๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜์‹œํ‚จ ๋ฌธ์ž ์ฝ”๋“œ๋“ค ์‚ฌ์ด์— ์กด์žฌ
  • ๊ฐ๋ฌธ์ž์— ํ• ๋‹น๋œ ์ด์ง„ ์ฝ”๋“œ๋Š” ์–ด๋–ค ๋‹ค๋ฅธ ๋ฌธ์ž์— ํ• ๋‹น๋œ ์ด์ง„์ฝ”๋“œ์˜ ์ ‘๋‘๋ถ€๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋ฅผ ์˜๋ฏธ
  • ์ ‘๋‘๋ถ€ ํŠน์„ฑ์˜ ์žฅ์ ์€ ์ฝ”๋“œ์™€ ์ฝ”๋“œ ์‚ฌ์ด๋ฅผ ๊ตฌ๋ถ„ํ•  ํŠน๋ณ„ํ•œ ์ฝ”๋“œ๊ฐ€ ํ•„์š” ์—†๋‹ค๋Š” ๊ฒƒ!

 

๐Ÿ’ก๊ทธ๋ž˜์„œ, ํ—ˆํ”„๋งŒ ์••์ถ•์€ ๋ญ˜๊นŒ?

  • ์ž…๋ ฅํŒŒ์ผ์— ๋Œ€ํ•ด ๊ฐ๋ฌธ์ž์˜ ์ถœํ˜„ ๋นˆ๋„์ˆ˜์— ๊ธฐ๋ฐ˜์„ ๋‘” ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ, ๊ฐ ๋ฌธ์ž์— ์ด์ง„์ฝ”๋“œ๋ฅผ ํ• ๋‹น
  • ์ด๋Ÿฌํ•œ ์ด์ง„์ฝ”๋“œ๋ฅผ ํ—ˆํ”„๋งŒ ์ฝ”๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

๐Ÿ’ก์˜์‚ฌ์ฝ”๋“œ

  • ์ž…๋ ฅ : ์ž…๋ ฅ ํŒŒ์ผ์˜ n๊ฐœ์˜ ๋ฌธ์ž์— ๋Œ€ํ•œ ๊ฐ๊ฐ์˜ ๋นˆ๋„ ์ˆ˜
  • ์ถœ๋ ฅ : ํ—ˆํ”„๋งŒ ํŠธ๋ฆฌ
1. ๊ฐ ๋ฌธ์ž๋‹น ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๋ฌธ์ž์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๋…ธ๋“œ์— ์ €์žฅ
2. n๊ฐœ์˜ ๋…ธ๋“œ์˜ ๋นˆ๋„์ˆ˜์— ๋Œ€ํ•ด ์šฐ์„ ์ˆœ์œ„ ํ Q๋ฅผ ๋งŒ๋“ ๋‹ค.
3. while(Q์— ์žˆ๋Š” ๋…ธ๋“œ ์ˆ˜ >=2){
4. 	๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ 2๊ฐœ์˜ ๋…ธ๋“œ (A,B)๋ฅผ Q์—์„œ ์ œ๊ฑฐ
5. 	์ƒˆ ๋…ธ๋“œ N์„ ๋งŒ๋“ค๊ณ , A์™€ B๋ฅผ N์˜ ์ž์‹ ๋…ธ๋“œ๋กœ ๋งŒ๋“ ๋‹ค.
6. 	N์˜ ๋นˆ๋„์ˆ˜ = A์˜ ๋นˆ๋„์ˆ˜ + B์˜ ๋นˆ๋„์ˆ˜
7. 	๋…ธ๋“œ N์„ Q์— ์‚ฝ์ž…ํ•œ๋‹ค.
}
8. return //ํ—ˆํ”„๋งŒ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ๋ฆฌํ„ด

 

๐Ÿ’ก์˜ˆ์ œ ์‹ค์Šต

  • ํ• ๋‹น๋œ ์ฝ”๋“œ๋“ค์„ ๋ณด๋ฉด, ๊ฐ€์žฅ ๋นˆ๋„์ˆ˜๊ฐ€ ๋†’์€ 'A'๊ฐ€ ๊ฐ€์žฅ ์งง์€ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ณ , ๋”ฐ๋ผ์„œ ๋ฃจํŠธ์˜ ์ž์‹์ด ๋˜์–ด ์žˆ๊ณ , ๋นˆ๋„์ˆ˜๊ฐ€ ๋‚ฎ์€ ๋ฌธ์ž๋Š” ๋ฃจํŠธ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง€๊ฒŒ๋˜์–ด ๊ธด ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง„๋‹ค.
  • ์ ‘๋‘๋ถ€ ํŠน์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ํŒŒ์ผ ์••์ถ•๋ฅ  
    • ์••์ถ•๋œ ํŒŒ์ผ์˜ ํฌ๊ธฐ์˜ bit ์ˆ˜ : sum(๋ฌธ์ž์˜ ๋นˆ๋„์ˆ˜ x ๋น„ํŠธ ์ˆ˜) = 1,620
    • ์•„์Šคํ‚ค ์ฝ”๋“œ๋กœ ๋œ ํŒŒ์ผ ํฌ๊ธฐ bit ์ˆ˜ : sum(๋ฌธ์ž์˜ ๋นˆ๋„์ˆ˜) x 8 = 7,440
    • 21.8% -> ์•ฝ 1/5 ํฌ๊ธฐ๋กœ ์••์ถ•๋จ

 

 

โฐ์‹œ๊ฐ„๋ณต์žก๋„

  • Line 1 : n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ , ๊ฐ ๋นˆ๋„์ˆ˜๋ฅผ ๋…ธ๋“œ์— ์ €์žฅํ•˜๋ฏ€๋กœ O(n)์‹œ๊ฐ„
  • Line2 : ์šฐ์„ ์ˆœ์œ„ ํ ๋งŒ๋“ค๊ธฐ -> ํž™ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ : O(n) ์‹œ๊ฐ„
  • Line3~7 : ์ตœ์†Œ ๋นˆ๋„์ˆ˜๋ฅผ ๊ฐ€์ง„ ๋…ธ๋“œ 2๊ฐœ๋ฅผ Q์—์„œ ์ œ๊ฑฐํ•˜๋Š” ํž™์˜ ์‚ญ์ œ ์—ฐ์‚ฐ๊ณผ ์ƒˆ ๋…ธ๋“œ๋ฅผ Q์— ์‚ฝ์ž…ํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ O(log n) (๊ฐ ์ธต์˜ ์ˆ˜๋งŒํผ!)
    • while ๋ฃจํ”„๋Š” (n-1)๋ฒˆ ๋ฐ˜๋ณต : ๋ฃจํ”„๊ฐ€ 1๋ฒˆ ์ˆ˜ํ–‰๋  ๋•Œ๋งˆ๋‹ค Q์—์„œ 2๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  1๊ฐœ๋ฅผ Q์— ์ถ”๊ฐ€ํ•˜๊ธฐ ๋–„๋ฌธ์—
    • (n-1)xO(logn) : O(nlogn)
  • Line 8 : ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ O(1) ์‹œ๊ฐ„
  • O(n) + O(n) + O(nlogn) + O(1) = O(nlogn)

 

 

โžฐ์‘์šฉ

  • ํŒฉ์Šค, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ €์žฅ, ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด, MP3 ์••์ถ• ๋“ฑ์— ํ™œ์šฉ
  • ์ •๋ณด ์ด๋ก  ๋ถ„์•ผ์—์„œ ์—”ํŠธ๋กœํ”ผ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ํ™œ์šฉ, ์ด๋Š” ์ž๋ฃŒ์˜ ๋ถˆํŠน์ •์„ฑ์„ ๋ถ„์„ํ•˜๊ณ  ์˜ˆ์ธกํ•˜๋Š”๋ฐ ์ด์šฉ๋จ.

Reference

์„œ์šธ๊ณผํ•™๊ธฐ์ˆ ๋Œ€ํ•™๊ต ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—