ํ”ผ๋“œ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
Perl ๐Ÿช Weekly #771 - Exploring Perl Modules
Dev.toDev.to
Backend

Bitmasking ๋ฐ Combinatorics ๊ธฐ๋ฐ˜ Subset Equilibrium ์ตœ์ ํ™” ๋ถ„์„

Perl ๐Ÿช Weekly #771 - Exploring Perl Modules

Gabor Szabo2026๋…„ 5์›” 4์ผ7๋ถ„intermediate

Context

NP-complete ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„ Subset Equilibrium ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ ‘๊ทผ๋ฒ• ํƒ์ƒ‰. ๋‹จ์ˆœ Iterative Search ๋ฐฉ์‹์˜ ๋น„ํšจ์œจ์ ์ธ ๋ฃจํ”„ ๊ตฌ์กฐ์™€ ์ง€์ˆ˜์  ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์ธํ•œ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ๋ฐœ์ƒ.

Technical Solution

  • ์ „์ฒด ๋ฒ”์œ„ ํ•ฉ๊ณผ ๋ฐฐ์—ด ํ•ฉ์˜ ์ฐจ์ด๋ฅผ ์ด์šฉํ•œ O(n) ๋ณต์žก๋„์˜ Missing Letter ํ•ด๊ฒฐ ๊ตฌ์กฐ ์„ค๊ณ„
  • Algorithm::Combinatorics ๋ชจ๋“ˆ์„ ํ†ตํ•œ 2~n-1 ํฌ๊ธฐ์˜ subset ์ „์šฉ ์ƒ์„ฑ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ํ™•๋ณด
  • 1-based Indexing ๋ณด์ •์„ ์œ„ํ•ด @combo .elems ํ•ฉ์‚ฐ ๋ฐ ํฌ์ง€์…”๋„ ์ดํ„ฐ๋ ˆ์ดํ„ฐ ๋„์ž…
  • Bit manipulation ๊ธฐ๋ฐ˜ 1~2^n-2 ๋ฒ”์œ„ ์ •์ˆ˜ ๋ฐ˜๋ณต์„ ํ†ตํ•œ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์˜์กด์„ฑ ์ œ๊ฑฐ ๋ฐ ์ด์‹์„ฑ ๊ฐ•ํ™”
  • ์ฐจ์ด๊ฐ’ ๋ฆฌ์ŠคํŠธ์˜ ์‚ฌ์ „ ๊ณ„์‚ฐ(Precomputation)์„ ํ†ตํ•œ ์กฐํ•ฉ ๋ฃจํ”„ ๋‚ด ์—ฐ์‚ฐ๋Ÿ‰ ์ตœ์†Œํ™” ์ „๋žต ์ ์šฉ
  • Ternary expression์„ ํ™œ์šฉํ•œ non-empty ๋ฐ empty ๊ฒฐ๊ณผ ์ผ€์ด์Šค์˜ ์ผ๊ด€๋œ ์ถœ๋ ฅ ์ฒ˜๋ฆฌ

- ์ง€์ˆ˜์  ๋ณต์žก๋„ ๋ฌธ์ œ ํ•ด๊ฒฐ ์‹œ Bitmasking์„ ํ†ตํ•œ Subset ์ƒ์„ฑ ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ๊ฒ€ํ†  - ๋ฐ˜๋ณต๋ฌธ ๋‚ด๋ถ€ ์—ฐ์‚ฐ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ Precomputation ๋ฆฌ์ŠคํŠธ ํ™œ์šฉ ๋ฐฉ์•ˆ ์ ์šฉ - ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด์„ฑ ์ œ๊ฑฐ๋ฅผ ํ†ตํ•œ ์‹œ์Šคํ…œ ์ด์‹์„ฑ ๋ฐ ๋ฐฐํฌ ํšจ์œจ์„ฑ ๊ฒ€์ฆ - 0-based์™€ 1-based ์ธ๋ฑ์Šค ํ˜ผ์šฉ ์‹œ ๋ช…ํ™•ํ•œ ๋ณด์ • ๋กœ์ง(Offset) ์ •์˜

์›๋ฌธ ์ฝ๊ธฐ