๐Ÿ”„ push_swap : ์ œ์•ฝ(Constraints) ์†์—์„œ ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ํƒ์ƒ‰ํ•˜๋‹ค

์ด ๊ณผ์ œ์˜ ํ•ต์‹ฌ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ง›๋ณด๊ธฐ๋ผ๋Š” ์ผ์ด์—ˆ๋‹ค.

์ด์ „์˜ ๊ณผ์ œ๋“ค์ด C์–ธ์–ด์˜ ๋ฌธ๋ฒ•, ์‹œ์Šคํ…œ๊ณผ์˜ ์†Œํ†ต ๋ฐฉ์‹์„ ์ตํžˆ๋Š” ๊ณผ์ •์ด์—ˆ๋‹ค๋ฉด, push_swap์€ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ฐจ์›์˜ ์งˆ๋ฌธ์„ ๋˜์ง„๋‹ค: โ€œ์—„๊ฒฉํ•œ ์ œ์•ฝ ์กฐ๊ฑด ํ•˜์—์„œ, ์–ด๋–ป๊ฒŒ โ€˜์ตœ์ (Optimal)โ€™์˜ ํ•ด๋ฅผ ์ฐพ์•„๋‚ผ ๊ฒƒ์ธ๊ฐ€?โ€

์ด ๊ณผ์ œ๋Š” ๋‹จ์ˆœํžˆ ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์Šคํƒ์ด๋ผ๋Š” ์ œํ•œ๋œ ๊ณต๊ฐ„๊ณผ 11๊ฐœ์˜ ๋ช…๋ น์–ด(์™ธ๋ถ€์— ๋…ธ์ถœ ๋  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น ๊ฐฏ์ˆ˜)๋ผ๋Š” ํ•œ์ •๋œ ๋„๊ตฌ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ, ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ์˜ โ€˜์ด๋™ ๊ฒฝ๋กœโ€™๋ฅผ ์„ค๊ณ„ํ•ด์•ผ ํ•˜๋Š” ๋ณต์žกํ•œ ์ตœ์ ํ™” ๋ฌธ์ œ(Optimization Problem)์ด๋‹ค.

Minitalk๊ฐ€ ์›์‹œ์ ์ธ ์‹ ํ˜ธ ์œ„์— ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์Œ“์•„ ์˜ฌ๋ฆฌ๋Š” ๊ฒฝํ—˜์ด์—ˆ๋‹ค๋ฉด, push_swap์€ ํ˜ผ๋ˆ(Unordered state) ์†์—์„œ ์งˆ์„œ(Sorted state)๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฐ€์žฅ ์šฐ์•„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์—ฌ์ •์„ ์ฐพ์•„๋‚ด๋Š” ๊ณผ์ •์ด์˜€๋‹ค.

์ด๋Š” ์ •ํ•ด์ง„ ๋‹ต์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, ๋ฌธ์ œ์˜ ๋ณธ์งˆ์„ ๊ฟฐ๋šซ๊ณ  ์ž์‹ ๋งŒ์˜ ํ•ด๊ฒฐ ์ „๋žต, ์ฆ‰ ํœด๋ฆฌ์Šคํ‹ฑ(Heuristic)์„ ์ฐฝ์กฐํ•˜๊ณ  ์ฆ๋ช…ํ•ด์•ผ ํ•˜๋Š”, ์ง„์ •ํ•œ ์˜๋ฏธ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์— ๋Œ€ํ•œ ์‹œํ—˜๋Œ€์˜€๋‹ค.

๐ŸŽฒ ๋ฌธ์ œ ๊ณต๊ฐ„์˜ ์ •์˜: ๋‘ ๊ฐœ์˜ ์Šคํƒ๊ณผ 11๊ฐœ์˜ ์—ฐ์‚ฐ์ž

push_swap์˜ ์„ธ๊ณ„๋Š” ๋‹ค์Œ์˜ ๊ณต๋ฆฌ(Axioms) ์œ„์— ์„ธ์›Œ์ ธ ์žˆ๋‹ค.

  1. ๋‘ ๊ฐœ์˜ ์Šคํƒ (a, b): ๋ชจ๋“  ์—ฐ์‚ฐ์˜ ์ฃผ์ฒด์ด์ž ๋Œ€์ƒ์ด ๋˜๋Š” ์œ ์ผํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ. ์ด๋Š” ์ž„์˜ ์ ‘๊ทผ(Random Access)์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์˜ค์ง LIFO(Last-In, First-Out) ์ ‘๊ทผ๋งŒ ํ—ˆ์šฉ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ์ œ์•ฝ์„ ์˜๋ฏธํ•œ๋‹ค.
  2. 11๊ฐœ์˜ ์—ฐ์‚ฐ์ž (sa, pb, ra, rra ๋“ฑ): ์Šคํƒ์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ํ•ฉ๋ฒ•์ ์ธ ํ–‰์œ„. ๊ฐ ์—ฐ์‚ฐ์ž๋Š” โ€˜1โ€™์ด๋ผ๋Š” ๋น„์šฉ(cost)์„ ๊ฐ€์ง€๋ฉฐ, ๊ณผ์ œ์˜ ๋ชฉํ‘œ๋Š” ์ด ๋น„์šฉ์˜ ์ดํ•ฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

๐Ÿ’ก ํ•ต์‹ฌ ์ „๋žต: LIS (์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด)๋ฅผ ์ด์šฉํ•œ ๋ฌธ์ œ ์žฌ์ •์˜

์ œ์ผ ์ฒ˜์Œ ์ด ๋ฌธ์ œ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ, ๋จธ๋ฆฌ๊ฐ€ ํ•˜์–—๊ฒŒ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋А๊ผˆ๋‹ค. ๋‚ด๊ฐ€ ํ•  ์ผ์ด ๋ญ”์ง€๋ฅผ ์•Œ๊ฒ ๊ณ  ๊ตฌํ˜„์€ ํ–ˆ์ง€๋งŒ, ๊ฐ ํ–‰๋™์„ ์–ด๋–ป๊ฒŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์—ฎ์–ด์•ผ ํ•˜์ง€?

์ง€๊ธˆ์€ ๊ทธ๋ž˜๋„ AI ๋กœ ์ ‘๊ทผ์€ ๋˜๋Š” ๊ฒƒ์ด์—ˆ์ง€๋งŒ, ํ•ต์‹ฌ์ ์ธ ์—ฐ์‚ฐ์ž๋ฅผ ๊ตฌํ˜„ํ•œ๊ฑธ ์–ด๋–ป๊ฒŒ ์—ฎ์–ด์•ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐฉ์‹์„ ์ ์šฉ์„ ํ•ด์„œ ์ตœ์ ํ™” ์‹œํ‚ค์ง€? ์ด ๋ฌธ์ œ๋Š” ๊ณ„์† ๋จธ๋ฆฌ๋ฅผ ์ฅ์–ด ๋œฏ๊ฒŒ ๋งŒ๋“ค๊ณ , ๋ญ˜ ์–ผ๋งˆ๋‚˜ ํ•ด์•ผํ•  ์ง€์— ๋Œ€ํ•œ ๋ง์„ค์ž„์„ ๋งŒ๋“ค์—ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ์–ด๋А์ •๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์ดํ•ด๊ฐ€ ์Œ“์ด๊ธฐ ์‹œ์ž‘ํ•˜๊ณ , ์†์„ ๋ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ ๊ฒƒ์€ โ€œ์–ด๋–ป๊ฒŒ ์›€์ง์ž„์˜ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•  ๊ฒƒ์ธ๊ฐ€?โ€๋ผ๋Š” ์งˆ๋ฌธ์— ๋ฌธ์ œ ์ž์ฒด๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ํ•˜๋ฉด์„œ ๋ถ€ํ„ฐ ์กฐ๊ธˆ์”ฉ ๊ฐ€๋Šฅํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

โ€œ๋ชจ๋“  ์›์†Œ๋ฅผ ์ •๋ ฌํ•˜๋ ค ํ•˜์ง€ ๋ง๊ณ , ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒƒ์— ๊ฐ€๊นŒ์šด ์›์†Œ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„, ํ๋ฆ„์„ ๋ฐฉํ•ดํ•˜๋Š” ์ตœ์†Œํ•œ์˜ ์›์†Œ๋“ค๋งŒ ์˜ฎ๊ธฐ๋ฉด ์–ด๋–จ๊นŒ?โ€

์ด ์ ‘๊ทผ๋ฒ•์„ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜๊ณ , ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•์—์„œ ํ•ด๋ฉ”๋˜ ๋„์ค‘์ด์—ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋‚˜๋Š” ์œ ๋ ˆ์นด๋ฅผ ๋ถˆ๋ €๋‹ค. ์ด ๋ฐฉ๋ฒ•์ด๋ผ๋ฉด ๋ญ”๊ฐ€ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์œผ๋กœ ๋ณด์ด๊ณ , ๋‚ด ์ดํ•ด๋„๋ฅผ ๋†’์ด๋ฉด์„œ ์ตœ์ ํ™”๋ฅผ ์ด๋ฃฐ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๊ฐ๊ฐ์ ์ธ ํ™•์‹ . ์ด๋Ÿฌํ•œ ํ™•์‹ ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ LIS (Longest Increasing Subsequence) ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํ•œ๊ตญ์–ด ๋ช… ์ตœ์žฅ์ฆ๊ฐ€์ˆ˜์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์—ˆ๋‹ค.

  1. ๊ธฐ์ค€์  ์„ค์ • (LIS ํƒ์ƒ‰): ๋จผ์ € ์Šคํƒ a์— ์กด์žฌํ•˜๋Š” ์ˆซ์ž๋“ค ์ค‘์—์„œ LIS, ์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด์„ ์ฐพ๋Š”๋‹ค. LIS์— ์†ํ•œ ์›์†Œ๋“ค์€ ์ตœ์ข…์ ์œผ๋กœ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ๋„ ๊ทธ ์ƒ๋Œ€์  ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ โ€˜์•ต์ปค(Anchor)โ€™ ๊ทธ๋ฃน์ด๋‹ค. ์ด๋“ค์€ ์šฐ๋ฆฌ๊ฐ€ ์ตœ์†Œํ•œ์œผ๋กœ ์›€์ง์—ฌ์•ผ ํ•  ๋Œ€์ƒ, ์ฆ‰ ๋ณด์กดํ•ด์•ผ ํ•  ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ ์›์†Œ๋“ค์˜ ๋ฌถ์Œ์ด์—ˆ๋‹ค.
  2. ๋ฌธ์ œ์˜ ๋ถ„๋ฆฌ: LIS ํƒ์ƒ‰ ํ›„, ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค.
    • LIS์— ์†ํ•˜์ง€ ์•Š๋Š” ์›์†Œ๋“ค์„ ์Šคํƒ b๋กœ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฌธ์ œ.
    • ์Šคํƒ b์˜ ์›์†Œ๋“ค์„ ๋‹ค์‹œ ์Šคํƒ a์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜๋กœ ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ๋ฌธ์ œ.

์ด์ฒ˜๋Ÿผ LIS๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฌธ์ œ๋ฅผ ์žฌ์ •์˜ํ•จ์œผ๋กœ์จ, โ€˜N๊ฐœ์˜ ์›์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œโ€™๋Š” โ€˜N-K๊ฐœ์˜ ์›์†Œ(K๋Š” LIS์˜ ๊ธธ์ด)๋ฅผ ๊ฐ€์žฅ ํšจ์œจ์ ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๋ฌธ์ œโ€™๋กœ ๋‹จ์ˆœํ™”๋œ๋‹ค. ์ด๋Š” ๋ณต์žกํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ, ๋ถˆ๋ณ€์˜ ๊ธฐ์ค€์„ ์ฐพ์•„๋‚ด๊ณ  ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ถ„ํ•ดํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๋žต์ด๋ฉฐ, ๋ฌด์—‡๋ณด๋‹ค ์ง๊ด€์ ์ด๋ผ๋Š” ์žฅ์ ์€ ๊ธฐ์กด์˜ ๋งŒ๋“ค์–ด๋‘” ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•œ ๊ตฌํ˜„์—์„œ ์•„์ฃผ ํšจ๊ณผ์ ์ด์—ˆ๋‹ค.

๐Ÿ’ƒ ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜(Greedy Algorithm)์˜ ์ ์šฉ: ์ตœ์  ์‚ฝ์ž… ๊ฒฝ๋กœ ํƒ์ƒ‰

์ด๋ ‡๊ฒŒ LIS ๊ทธ๋ฃน์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋‚˜๋ฉด, ์ด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์›์†Œ๊ฐ€ ์Šคํƒ b๋กœ ์˜ฎ๊ฒจ์ง„ ํ›„, ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„๋Š” ์Šคํƒ b์˜ ์›์†Œ๋“ค์„ ๋‹ค์‹œ a๋กœ ๋Œ๋ ค๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๊ณผ์ •์€ ๋งค ์ˆœ๊ฐ„ โ€˜์ง€์—ญ์ ์œผ๋กœ ์ตœ์ ์ธ(Locally Optimal)โ€™ ์„ ํƒ์„ ๋ฐ˜๋ณตํ•˜๋Š” ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ด๋•Œ ํ•ต์‹ฌ์€ ๋‹จ์ˆœํžˆ ๊ฐ๊ฐ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ, ๋™์‹œ์— ์–‘์ชฝ์„ ๊ฐ™์ด ์›€์ง์ด๊ฑฐ๋‚˜, ์ ์ ˆํ•˜๊ฒŒ ์˜คํžˆ๋ ค ๊ฑฐ๊พธ๋กœ ์ˆœ์„œ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋„๊ตฌ๋“ค์„ ์–ผ๋งˆ๋‚˜ ๊ฐ ์Šคํ…์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋ฌถ์–ด์„œ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋‚˜์— ๋‹ฌ๋ ค ์žˆ์—ˆ๋‹ค.

  • ๋น„์šฉ ํ•จ์ˆ˜ ์ •์˜: ์Šคํƒ b์˜ ํŠน์ • ์›์†Œ๋ฅผ ์Šคํƒ a์˜ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ์‚ฝ์ž…ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ra, rra, rb, rrb ์—ฐ์‚ฐ์˜ ์ด ํšŸ์ˆ˜๋ฅผ โ€˜๋น„์šฉโ€™์œผ๋กœ ์ •์˜ํ•œ๋‹ค.
  • ์ตœ์ ํ•ด ํƒ์ƒ‰: ์Šคํƒ b์˜ ๋ชจ๋“  ์›์†Œ์— ๋Œ€ํ•ด ์ด ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ์ค‘ ๊ฐ€์žฅ ๋น„์šฉ์ด ๋‚ฎ์€, ์ฆ‰ ๊ฐ€์žฅ ์ ์€ ์—ฐ์‚ฐ์œผ๋กœ ์ œ์ž๋ฆฌ๋ฅผ ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์›์†Œ๋ฅผ ์ด๋ฒˆ ํ„ด์— ์ด๋™์‹œํ‚ฌ ๋Œ€์ƒ์œผ๋กœ ์„ ํƒํ•œ๋‹ค.
  • ์ตœ์ ํ™”: ๋งŒ์•ฝ a์™€ b ์Šคํƒ์ด ๊ฐ™์€ ๋ฐฉํ–ฅ์œผ๋กœ ํšŒ์ „ํ•ด์•ผ ํ•œ๋‹ค๋ฉด(ra์™€ rb), ์ด๋ฅผ rr์ด๋ผ๋Š” ๋‹จ์ผ ์—ฐ์‚ฐ์œผ๋กœ ํ†ตํ•ฉํ•˜์—ฌ ๋น„์šฉ์„ ์ ˆ๊ฐํ•˜๋Š” ์ตœ์ ํ™”๋ฅผ ์ ์šฉํ•œ๋‹ค. ์ด์™€ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ์—” rrr์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ด ๊ณผ์ •์„ ์Šคํƒ b๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•จ์œผ๋กœ์จ, ์ „์ฒด ์ด๋™ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒฝ๋กœ์— ๊ทผ์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ ์„ฑ์ฐฐ ๋ฐ ๋ฐฐ์šด ์ 

์ด ๊ณผ์ œ๋Š” ์ฒด๊ฐ์ƒ printf ๋ณด๋‹ค๋„ ์–ด๋ ต๊ณ , ์–ด์ฉŒ๋ฉด 42์„œ์šธ ๊ณผ์ • ์ค‘์—์„œ ์ƒ๋‹นํžˆ ๊ธธ๊ฒŒ ๊ฑธ๋ฆฐ, push_swap์€ ๋…ผ๋ฆฌ์  ์‚ฌ๊ณ ์™€ ์ „๋žต์  ์„ค๊ณ„, ์ˆ˜ํ•™์  ๊ฐ๊ฐ ๋“ฑ์˜ ๋Šฅ๋ ฅ์„ ์š”๊ตฌํ•˜๋Š” ๊ณผ์ œ์˜€๋‹ค. ๋‚˜๊ฐ™์€ ๋ฌธ๊ณผ์ƒ๋“ค์—๊ฒŒ๋Š” ์ •๋ง ์ง€์˜ฅ๊ณผ๋„ ๊ฐ™์•˜๋˜ ์‹œ๊ฐ„์ด๋ผ๊ณ (โ€ฆ.), ๊ทธ๋ฆฌ๊ณ  ๋™์‹œ์— ๊ทธ๋ ‡๊ธฐ์— ์ง„์งœ ์ˆ˜ํ•™์„ ์™œ ๊ทธ๋ฆฌ ์—ด์‹ฌํžˆ ๋ฐฐ์šฐ๋Š” ์ง€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿผ์—๋„ ์ด ๊ณผ์ œ๋ฅผ ๋งˆ๋ฌด๋ฆฌ ํ•จ์œผ๋กœ์จ

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์‚ฌ๊ณ ๋กœ์˜ ์ „ํ™˜: โ€˜์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒโ€™๋ฅผ ๋„˜์–ด โ€˜์–ด๋–ค ์ „๋žต์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ผ๊นŒโ€™๋ฅผ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. ์ด๋Š” ๋‹จ์ˆœํžˆ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ํ–‰์œ„์—์„œ ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•ด๊ฒฐ์ฑ…์„ ์„ค๊ณ„ํ•˜๋Š” ๋‹จ๊ณ„๋กœ์˜ ์„ฑ์žฅ์„ ์˜๋ฏธํ–ˆ๊ณ , ํŠนํžˆ๋‚˜ ์™œ ๊ทธ๋ ‡๊ฒŒ โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜โ€™์ด๋ผ๋Š” ํ‚ค์›Œ๋“œ์— ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ•์กฐํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์–ผ๋งˆ๋‚˜ ์ž‘์—…์˜ ์ฐจ์ด๊ฐ€ ํฌ๊ฒŒ ๋‚˜๋Š”์ง€๋ฅผ ์ง์ ‘ ๋ˆˆ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋˜ ๊ฒฝํ—˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • ํœด๋ฆฌ์Šคํ‹ฑ์˜ ๊ฐ€์น˜: ์ˆ˜ํ•™์ ์œผ๋กœ ์™„๋ฒฝํ•œ ์ตœ์ ํ•ด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต๊ฑฐ๋‚˜(NP-hard) ๋น„ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค. LIS๋ผ๋Š” ๊ฐ•๋ ฅํ•œ ํœด๋ฆฌ์Šคํ‹ฑ์„ ํ†ตํ•ด โ€˜์ถฉ๋ถ„ํžˆ ์ข‹์€(good enough)โ€™ ํ•ด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฐพ์•„๋‚ด๋Š” ๊ณผ์ •์€, ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‹ค์šฉ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ๊ฐ€๋ฅด์ณ์ฃผ์—ˆ๋‹ค.
  • ์—ฐ์‚ฐ์˜ ๋น„์šฉ์— ๋Œ€ํ•œ ๊ฐ๊ฐ: ๋ชจ๋“  ๋ช…๋ น์–ด์— โ€˜๋น„์šฉโ€™์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•จ์„ ์ธ์ง€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Š” โ€œ์ž‘๋™ํ•˜๋Š” ์ฝ”๋“œโ€์™€ โ€œํšจ์œจ์ ์ธ ์ฝ”๋“œโ€์˜ ์ฐจ์ด๋ฅผ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ์œผ๋ฉฐ, ์„ฑ๋Šฅ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋งˆ์ธ๋“œ์…‹์„ ์‹ฌ์–ด์ฃผ์—ˆ๋‹ค.

push_swap์€ ์Šคํƒ์ด๋ผ๋Š” ๋‹จ์ˆœํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์œ„์—์„œ ํŽผ์ณ์ง€๋Š” ํ•œ ํŽธ์˜ ๋…ผ๋ฆฌ์ ์ธ ์™ˆ์ธ ์˜€๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋‚˜๋Š” ๋น„๋กœ์†Œ ์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ดํ•ดํ•˜๊ณ , ๊ทธ ์•ˆ์—์„œ ์ตœ์ ์˜ ํ•ด๊ฒฐ์ฑ…์„ ์„ค๊ณ„ํ•˜๋Š” โ€˜์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„์žโ€™๋กœ์„œ์˜ ์ฒซ๊ฑธ์Œ์„ ๋—„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.