Algorithms

์ •๋ ฌ

์„ ํƒ ์ •๋ ฌ

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• : ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ

  • ๋ณต์žกํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ• : ํ€ต ์ •๋ ฌ, ํž™ ์ •๋ ฌ, ํ•ฉ๋ณ‘ ์ •๋ ฌ, ๊ธฐ์ˆ˜ ์ •๋ ฌ

๊ทธ ์ค‘์—์„œ ์ด๋ฒˆ์—๋Š” ์„ ํƒ ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค.

โœจ ๊ฐœ๋…

  • ํ•ด๋‹น ์ˆœ์„œ์— ์›์†Œ๋ฅผ ๋„ฃ์„ ์œ„์น˜๋Š” ์ด๋ฏธ ์ •ํ•ด์ ธ์žˆ๊ณ , ์–ด๋–ค ์›์†Œ๋ฅผ ๋„ฃ์„์ง€ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • ํ˜„์žฌ ์œ„์น˜์— ์ €์žฅ๋  ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๋ƒ, ํฌ๋ƒ์— ๋”ฐ๋ผ์„œ ์ตœ์†Œ ์„ ํƒ ์ •๋ ฌ(์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ)๊ณผ ์ตœ๋Œ€ ์„ ํƒ ์ •๋ ฌ(๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ)๋กœ ๋‚˜๋‰œ๋‹ค.

โœจ ๋กœ์ง

  1. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์žก๋Š”๋‹ค. ๊ธฐ์ค€์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค.

  2. ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ ๊ธฐ์ค€ ์ดํ›„์˜ ๊ฐ’ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.

  3. ์ตœ์†Œ๊ฐ’๊ณผ ๊ทธ ๊ธฐ์ค€์˜ ๊ฐ’์„ ๊ต์ฒดํ•œ๋‹ค.

  4. ๊ธฐ์ค€ ์ดํ›„์˜ ๋‚˜๋จธ์ง€ ๋ฐฐ์—ด์„ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค.

โœจ ์žฅ์ 

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹จ์ˆœํ•˜๋‹ค.

  • ์ •๋ ฌ์„ ์œ„ํ•œ ๋น„๊ต๋Š” ์—ฌ๋Ÿฌ๋ฒˆ ์ˆ˜ํ–‰๋˜์ง€๋งŒ, ์‹ค์ œ๋กœ ๊ตํ™˜ ํšŸ์ˆ˜๋Š” ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ตํ™˜์ด ์ผ์–ด๋‚˜์•ผ ํ•˜๋Š” ์ž๋ฃŒ ์ƒํƒœ์—์„œ ๋น„๊ต์  ํšจ์œจ์ ์ธ ๋ฉด์ด ์žˆ๋‹ค.

  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โœจ ๋‹จ์ 

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N^2)์ด๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค.

  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ(Unstable Sort)์ด๋‹ค.

๊ฑฐํ’ˆ ์ •๋ ฌ

  • ์„œ๋กœ ์ธ์ ‘ํ•œ ๋‘ ์›์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • ์ธ์ ‘ํ•œ 2๊ฐœ์˜ ์›์†Œ๋ฅผ ๋น„๊ตํ•ด ํฌ๊ธฐ๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ๊ตํ™˜ํ•œ๋‹ค.

  • ์„ ํƒ ์ •๋ ฌ๊ณผ ๊ธฐ๋ณธ ๊ฐœ๋…์ด ์œ ์‚ฌํ•˜๋‹ค.

โœจ ๋กœ์ง

  1. 1ํšŒ์ „์— ์ฒซ ๋ฒˆ์งธ ์›์†Œ์™€ ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ, ๋‘ ๋ฒˆ์งธ ์›์†Œ์™€ ์„ธ ๋ฒˆ์งธ ์›์†Œ๋ฅผ, ์„ธ ๋ฒˆ์งธ ์›์†Œ์™€ ๋„ค ๋ฒˆ์งธ ์›์†Œ๋ฅผ, ... ์ด๋Ÿฐ ์‹์œผ๋กœ ๋งˆ์ง€๋ง‰ - 1 ๋ฒˆ์งธ ์›์†Œ์™€ ๋งˆ์ง€๋ง‰ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์กฐ๊ฑด์— ๋งž์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ ๊ตํ™˜ํ•œ๋‹ค.

  2. 1ํšŒ์ „์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ๊ฐ€์žฅ ํฐ ์›์†Œ๊ฐ€ ๋งจ ๋’ค๋กœ ์ด๋™ํ•˜๋ฏ€๋กœ 2ํšŒ์ „์—์„œ๋Š” ๋งจ ๋์— ์žˆ๋Š” ์›์†Œ๋Š” ์ •๋ ฌ์—์„œ ์ œ์™ธ๋˜๊ณ , 2ํšŒ์ „์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ๋์—์„œ ๋‘๋ฒˆ์งธ ์›์†Œ๊นŒ์ง€๋Š” ์ •๋ ฌ์—์„œ ์ œ์™ธ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ •๋ ฌ์„ 1ํšŒ์ „ ์ˆ˜ํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ์ •๋ ฌ์—์„œ ์ œ์™ธ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜์”ฉ ๋Š˜์–ด๋‚œ๋‹ค.

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

(n-1)+(n-2)+(n-3)+ ... +2+1 => n(n-1)/2์ด๋ฏ€๋กœ, O(N^2)์ด๋‹ค.

๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๊ฑด, ์•ˆ๋˜์–ด์žˆ๊ฑด 2๊ฐœ์˜ ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์•…์˜ ๊ฒฝ์šฐ, ์ตœ์„ ์˜ ๊ฒฝ์šฐ, ํ‰๊ท ์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N^2)์œผ๋กœ ๋™์ผํ•˜๋‹ค.

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

์ฃผ์–ด์ง„ ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜์„ ํ†ตํ•ด ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ O(N)์ด๋‹ค.

โœจ ์žฅ์ 

  • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๊ณ  ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ์ง๊ด€์ ์ด๋‹ค.

  • ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ, ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.

  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์•ˆ์ • ์ •๋ ฌ์ด๋‹ค.

โœจ ๋‹จ์ 

  • ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ ์ตœ์•…, ์ตœ์„ , ํ‰๊ท  ๋ชจ๋‘ O(N^2)์ด๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค.

  • ๋‹ค๋ฅธ ์ •๋ ฌ์— ๋น„ํ•ด ์ •๋ ฌ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.

  • ๊ตํ™˜ ํšŸ์ˆ˜๊ฐ€ ๋งŽ๋‹ค.

  • ์—ญ์ˆœ๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ, ๊ฐ€์žฅ ๋А๋ฆฌ๋‹ค.

์‚ฝ์ž… ์ •๋ ฌ

โœจ ๊ฐœ๋…

  • ์† ์•ˆ์˜ ์นด๋“œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

  • ์ƒˆ๋กœ์šด ์นด๋“œ๋ฅผ ๊ธฐ์กด์˜ ์ •๋ ฌ๋œ ์นด๋“œ ์‚ฌ์ด์— ์˜ฌ๋ฐ”๋ฅธ ์ž๋ฆฌ๋ฅผ ์ฐพ์•„ ์‚ฝ์ž…ํ•œ๋‹ค.

  • 2๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ ์•ž(์™ผ์ชฝ)์˜ ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์‚ฝ์ž…ํ•  ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ ํ›„, ์›์†Œ๋ฅผ ๋’ค๋กœ ์˜ฎ๊ธฐ๊ณ  ์ง€์ •๋œ ์ž๋ฆฌ์— ์ž๋ฃŒ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  • ์ตœ์„ ์˜ ๊ฒฝ์šฐ, O(N)์ด๋ผ๋Š” ์—„์ฒญ๋‚˜๊ฒŒ ๋น ๋ฅธ ํšจ์œจ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ๋ถ€๋กœ ์‚ฌ์šฉ๋ ๋งŒํผ ์ข‹์€ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

โœจ ๋กœ์ง

  1. ์ •๋ ฌ์€ 2๋ฒˆ์งธ ์œ„์น˜(index)์˜ ๊ฐ’์„ standard์— ์ €์žฅํ•œ๋‹ค

  2. standard์™€ ์ด์ „์— ์žˆ๋Š” ์›์†Œ๋“ค๊ณผ ๋น„๊ตํ•˜์—ฌ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋ฉฐ ์‚ฝ์ž…ํ•ด ๋‚˜๊ฐ„๋‹ค.

  3. 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค์Œ ์œ„์น˜(index)์˜ ๊ฐ’์„ standard์— ์ €์žฅํ•˜๊ณ  ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

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

  • ์ตœ์•…์˜ ๊ฒฝ์šฐ(์—ญ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ), ์„ ํƒ ์ •๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ (n-1)+(n-2)+ ... +2+1 => n(n-1)/2 ์ฆ‰, O(N^2)์ด๋‹ค.

  • ํ•˜์ง€๋งŒ, ๋ชจ๋‘ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ํ•œ๋ฒˆ์”ฉ๋งŒ ๋น„๊ตํ•˜๋ฏ€๋กœ O(N)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋˜ํ•œ, ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š”๋ฐฐ์—ด์— ์ž๋ฃŒ๋ฅผ ํ•˜๋‚˜์”ฉ ์‚ฝ์ž…/์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํ˜„์‹ค์ ์œผ๋กœ ์ตœ๊ณ ์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋˜๋Š”๋ฐ, ํƒ์ƒ‰์„ ์ œ์™ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งค์šฐ ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ์ตœ์„ ์˜ ๊ฒฝ์šฐ : O(N)

  • ํ‰๊ท ๊ณผ ์ตœ์•…์˜ ๊ฒฝ์šฐ : O(N^2)

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

  • ์ฃผ์–ด์ง„ ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜์„ ํ†ตํ•ด ์ •๋ ฌ์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— O(N)์ด๋‹ค.

โœจ ์žฅ์ 

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹จ์ˆœํ•˜๋‹ค.

  • ๋Œ€๋ถ€๋ถ„์˜ ์›์†Œ๊ฐ€ ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋งค์šฐ ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ์„ ํƒ ์ •๋ ฌ์ด๋‚˜ ๋ฒ„๋ธ” ์ •๋ ฌ์— ๋น„ํ•˜์—ฌ ์ƒ๋Œ€์ ์œผ๋กœ ๋น ๋ฅด๋‹ค.

โœจ ๋‹จ์ 

  • ๋น„๊ต์  ๋งŽ์€ ์ˆ˜๋“ค์˜ ์ด๋™์„ ํฌํ•จํ•œ๋‹ค.

  • ๋น„๊ตํ•  ์ˆ˜๊ฐ€ ๋งŽ๊ณ  ํฌ๊ธฐ๊ฐ€ ํด ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.(๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์ )

  • ํ‰๊ท ๊ณผ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N^2)์ด๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค.

๋ณ‘ํ•ฉ ์ •๋ ฌ

ํ•ฉ๋ณ‘ ์ •๋ ฌ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋ฉฐ, ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

โœจ ๊ฐœ๋…

  • ๋น ๋ฅธ ์ •๋ ฌ๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ, Quick Sort์™€ ํ•จ๊ป˜ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ์ •๋ ฌ ๋ฐฉ์‹์ด๋‹ค.

  • Quick Sort์™€๋Š” ๋ฐ˜๋Œ€๋กœ ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•œ๋‹ค.

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

์š”์†Œ๋ฅผ ์ชผ๊ฐ  ํ›„, ๋‹ค์‹œ ํ•ฉ๋ณ‘์‹œํ‚ค๋ฉด์„œ ์ •๋ ฌํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ์‹์œผ๋กœ ์ชผ๊ฐœ๋Š” ๋ฐฉ์‹์€ ํ€ต ์ •๋ ฌ๊ณผ ์œ ์‚ฌ.

โœจ ์žฅ์ 

  • ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ์— ์˜ํ–ฅ์„ ๋œ ๋ฐ›๋Š”๋‹ค. ์ฆ‰, ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์—‡์ด๋“  ๊ฐ„์— ์ •๋ ฌ๋˜๋Š” ์‹œ๊ฐ„์€ ๋™์ผํ•˜๋‹ค. -> O(N logN)

  • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ •๋ ฌํ•œ ๊ฒฝ์šฐ, LinkedList๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ํ€ต ์ •๋ ฌ์„ ํฌํ•จํ•œ ๋‹ค๋ฅธ ์–ด๋–ค ์ •๋ ฌ ๋ฐฉ๋ฒ•๋ณด๋‹ค ํšจ์œจ์ ์ด๋‹ค.

  • ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•œ๋‹ค.

โœจ ๋‹จ์ 

  • ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑํ•œ๋‹ค๋ฉด, ์ž„์‹œ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋‹ค.

    • ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค.

    • ์ œ์ž๋ฆฌ ์ •๋ ฌ์ด ์•„๋‹ˆ๋‹ค.

  • ๋ ˆ์ฝ”๋“œ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๊ฒฝ์šฐ์—๋Š” ์ด๋™ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ๋งค์šฐ ํฐ ์‹œ๊ฐ„์  ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค.

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

  • ํ‰๊ท  : O(N logN)

  • ์ตœ์•… : O(N logN)

  • ์ตœ์„  : O(N logN)

์ด๋ถ„ ํƒ์ƒ‰

ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•˜๋ฉด์„œ ์ฐพ๋Š” ๋ฐฉ์‹

์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋Œ๋ฉด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ~~~์”ฌ ๋น ๋ฅธ ์žฅ์ ์„ ์ง€๋‹˜

  • ์‹œ๊ฐ„๋ณต์žก๋„ ์ „์ฒด ํƒ์ƒ‰ : O(N) ์ด๋ถ„ ํƒ์ƒ‰ : O(logN)

โœจ ์ง„ํ–‰ ์ˆœ์„œ

  • ์šฐ์„  ์ •๋ ฌ์„ ํ•ด์•ผ ํ•จ

  • left์™€ right๋กœ mid ๊ฐ’ ์„ค์ •

  • mid์™€ ๋‚ด๊ฐ€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’๊ณผ ๋น„๊ต

  • ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ๋†’์œผ๋ฉด : left = mid+1 ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด : right = mid - 1

  • left > right๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณตํ•˜

ํ€ต ์ •๋ ฌ

โœจ ๊ฐœ๋…

  • ํ€ต ์ •๋ ฌ์€ ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค.

    • ๋ถ„ํ•  ์ •๋ณต(Divide and Conquer) : ๋ฌธ์ œ๋ฅผ ์ž‘์€ 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ์„ ํ•ด๊ฒฐํ•œ ๋‹ค์Œ, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „๋žต์ด๋‹ค.

  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์›์†Œ์™€์˜ ๋น„๊ต๋งŒ์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋น„๊ต ์ •๋ ฌ์— ์†ํ•œ๋‹ค.

  • ๋˜ํ•œ, Merge Sort์™€ ๋‹ฌ๋ฆฌ Quick Sort๋Š” ๋ฐฐ์—ด์„ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํ• ํ•œ๋‹ค.

โœจ ๋กœ์ง

  1. ๋ฐฐ์—ด ๊ฐ€์šด๋ฐ์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ๊ณ ๋ฅธ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ณ ๋ฅธ ์›์†Œ๋Š” ํ”ผ๋ฒ—(pivot)์ด๋ผ๊ณ  ํ•œ๋‹ค.

  2. ํ”ผ๋ฒ— ์•ž์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ๊ฐ’์ด ์ž‘์€ ๋ชจ๋“  ์›์†Œ๋“ค์ด ์˜ค๊ณ , ํ”ผ๋ฒ— ๋’ค์—๋Š” ํ”ผ๋ฒ—๋ณด๋‹ค ๊ฐ’์ด ํฐ ๋ชจ๋“  ์›์†Œ๋“ค์ด ์˜ค๋„๋ก ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฐฐ์—ด์„ ๋‘˜๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์„ ๋ถ„ํ• (Divide)์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ถ„ํ• ์„ ๋งˆ์นœ ๋’ค์— ํ”ผ๋ฒ—์€ ๋” ์ด์ƒ ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค.

  3. ๋ถ„ํ•  ๋œ ๋‘ ๊ฐœ์˜ ์ž‘์€ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์žฌ๊ท€์ ์œผ๋กœ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ์ด ํ•œ๋ฒˆ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ์ตœ์ข…์ ์œผ๋กœ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ˜๋“œ์‹œ ๋๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ถ„ํ• (Divide) : ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ 2๊ฐœ์˜ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•œ๋‹ค.(ํ”ผ๋ฒ—์„ ์ค‘์‹์œผ๋กœ ์™ผ์ชฝ : ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ์š”์†Œ๋“ค, ์˜ค๋ฅธ์ชฝ : ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ์š”์†Œ๋“ค)

  • ์ •๋ณต(Conquer) : ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌํ•œ๋‹ค. ๋ถ€๋ถ„ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ถฉ๋ถ„ํžˆ ์ž‘์ง€ ์•Š์œผ๋ฉด ์ˆœํ™˜ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด ๋‹ค์‹œ ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•œ๋‹ค.

โœจ Qucik Sort ๊ฐœ์„ 

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” ํ”ผ๋ฒ—์„ ๋ฐฐ์—ด์˜ ๊ฐ€์šด๋ฐ ์›์†Œ๋กœ ์ง€์ •ํ•จ์œผ๋กœ์จ ์–ด๋А ์ •๋„ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•œ ํ˜•ํƒœ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ํ”ผ๋ฒ— ๊ฐ’์ด ์ตœ์†Œ๋‚˜ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ์ง€์ •๋˜๋ฉด ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์›์†Œ๋“ค์ด ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ์ฐพ๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. O(N^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ฆ‰, ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด์ด ์˜ค๋ฆ„์ฐจ์ˆœ ํ˜น์€ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฉด O(N^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋•Œ, ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ’๊ณผ ์ค‘๊ฐ„๊ฐ’์„ ๊ตํ™˜ํ•ด์ค€๋‹ค๋ฉด ํ™•๋ฅ ์ ์œผ๋กœ๋‚˜๋งˆ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N logN)์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ํ•œ๋‹ค ํ•˜๋”๋ผ๋„ Quick Sort์˜ ์ตœ์•…์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N logN)์ด ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

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

์ตœ์„ ์˜ ๊ฒฝ์šฐ : T(N) = O(N logN)

  • ๋น„๊ต ํšŸ์ˆ˜ : logN

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

์ฃผ์–ด์ง„ ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜์„ ํ†ตํ•ด ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ O(N)์ด๋‹ค.

โœจ ์žฅ์ 

  • ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์˜ ์ด๋™์„ ์ค„์ด๊ณ  ๋จผ ๊ฑฐ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•œ๋ฒˆ ๊ฒฐ์ •๋œ ํ”ผ๋ฒ—๋“ค์ด ์ถ”ํ›„ ์—ฐ์‚ฐ์—์„œ ์ œ์™ธ๋˜๋Š” ํŠน์„ฑ ๋•Œ๋ฌธ์—, ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(N logN)์„ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ๋„ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.

  • ์ •๋ ฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฏ€๋กœ, ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โœจ ๋‹จ์ 

  • ๋ถˆ์•ˆ์ • ์ •๋ ฌ์ด๋‹ค.

  • ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋Š” Quick Sort์˜ ๋ถˆ๊ท ํ˜• ๋ถ„ํ• ์— ์˜ํ•ด ์˜คํžˆ๋ ค ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๊ฑธ๋ฆฐ๋‹ค.

โœจ ๊ฒฐ๋ก 

Quick Sort๋Š” ํ‰๊ท ์ ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

Java์—์„œ๋Š” Arrays.sort()๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ Dual Pivot Quick Sort๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์„ ์ •๋„๋กœ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

๋˜ํ•œ, ๊ธฐ์ˆ  ๋ฉด์ ‘์—์„œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋‚˜์˜ค๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ˆ™์ง€ํ•ด์•ผ ํ•œ๋‹ค.

ํž™ ์ •๋ ฌ

์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋Š” ํž™ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ •๋ ฌ ๋ฐฉ์‹์ด๋‹ค.

๋ถˆ์•ˆ์ • ์ •๋ ฌ์— ์†ํ•œ๋‹ค.

[์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ?]

  • ์‚ฝ์ž…ํ•  ๋•Œ, ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ

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

  • ํ‰๊ท  : O(N logN)

  • ์ตœ์„  : O(N logN)

  • ์ตœ์•… : O(N logN)

โœจ ๋กœ์ง

  1. ์ตœ๋Œ€ ํž™์„ ๊ตฌ์„ฑํ•œ๋‹ค.

  2. ํ˜„์žฌ ํž™ ๋ฃจํŠธ๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค. ๋ฃจํŠธ์˜ ๊ฐ’์„ ๋งˆ์ง€๋ง‰ ์š”์†Œ์™€ ๋ฐ”๊พผ ํ›„, ํž™์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ํ•˜๋‚˜ ์ค„์ธ๋‹ค.

  3. ํž™์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ 1๋ณด๋‹ค ํฌ๋ฉด ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ตœ๋Œ€ ๊ฐ’์„ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„๋‚ด๋ฉด์„œ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์ด Heap Sort์ด๋‹ค.

๊ธฐ์ˆ˜ ์ •๋ ฌ

โœจ Comparison Sort


N๊ฐœ ์›์†Œ์˜ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, ์ด๋ฅผ ๋ชจ๋‘ ์ •๋ ฌํ•˜๋Š” ๊ฐ€์ง“์ˆ˜๋Š” N!์ž„

๋”ฐ๋ผ์„œ, Comparison Sort๋ฅผ ํ†ตํ•ด ์ƒ๊ธฐ๋Š” ํŠธ๋ฆฌ์˜ ๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ N! ์ด์ƒ์˜ ๋…ธ๋“œ ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š”, 2^h >= N! ๋ฅผ ๋งŒ์กฑํ•˜๋Š” h๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ , ์ด ์‹์„ h > O(nlgn)์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. (h๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด,,, ์ฆ‰ Comparison sort์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์ž„)

์ด๋Ÿฐ O(nlgn)์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ Comparison์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

โœจ Radix sort


๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋ณธ ์š”์†Œ (Radix) ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€๊ฐ’์— ๋”ฐ๋ผ์„œ Counting Sort์˜ ๋น„ํšจ์œจ์„ฑ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, Radix Sort๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

์ž๋ฆฟ์ˆ˜์˜ ๊ฐ’ ๋ณ„๋กœ (์˜ˆ) ๋‘˜์งธ ์ž๋ฆฌ, ์ฒซ์งธ ์ž๋ฆฌ) ์ •๋ ฌ์„ ํ•˜๋ฏ€๋กœ, ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ตœ๋Œ€ ์‚ฌ์ด์ฆˆ๋Š” 9์ž„ (๋ฒ”์œ„ : 0 ~ 9)

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ : O(d * (n + b))

    • d๋Š” ์ •๋ ฌํ•  ์ˆซ์ž์˜ ์ž๋ฆฟ์ˆ˜, b๋Š” 10 (k์™€ ๊ฐ™์œผ๋‚˜ 10์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ๋‹ค.)

    ( Counting Sort์˜ ๊ฒฝ์šฐ : O(n + k) ๋กœ ๋ฐฐ์—ด์˜ ์ตœ๋Œ“๊ฐ’ k์— ์˜ํ–ฅ์„ ๋ฐ›์Œ )

  • ์žฅ์  : ๋ฌธ์ž์—ด, ์ •์ˆ˜ ์ •๋ ฌ ๊ฐ€๋Šฅ

  • ๋‹จ์  : ์ž๋ฆฟ์ˆ˜๊ฐ€ ์—†๋Š” ๊ฒƒ์€ ์ •๋ ฌํ•  ์ˆ˜ ์—†์Œ. (๋ถ€๋™ ์†Œ์ˆซ์ )

    ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  bucket ๊ณต๊ฐ„์ด ํ•„์š”ํ•จ.

๊ณ„์ˆ˜ ์ •๋ ฌ

โœจ Comparison Sort


N๊ฐœ ์›์†Œ์˜ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, ์ด๋ฅผ ๋ชจ๋‘ ์ •๋ ฌํ•˜๋Š” ๊ฐ€์ง“์ˆ˜๋Š” N!์ž„

๋”ฐ๋ผ์„œ, Comparison Sort๋ฅผ ํ†ตํ•ด ์ƒ๊ธฐ๋Š” ํŠธ๋ฆฌ์˜ ๋ง๋‹จ ๋…ธ๋“œ๊ฐ€ N! ์ด์ƒ์˜ ๋…ธ๋“œ ๊ฐฏ์ˆ˜๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ๋Š”, 2^h >= N! ๋ฅผ ๋งŒ์กฑํ•˜๋Š” h๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๊ณ , ์ด ์‹์„ h > O(nlgn)์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. (h๋Š” ํŠธ๋ฆฌ์˜ ๋†’์ด,,, ์ฆ‰ Comparison sort์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์ž„)

์ด๋Ÿฐ O(nlgn)์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ Comparison์„ ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ

โœจ Counting Sort ๊ณผ์ •


์‹œ๊ฐ„ ๋ณต์žก๋„ : O(n + k) -> k๋Š” ๋ฐฐ์—ด์—์„œ ๋“ฑ์žฅํ•˜๋Š” ์ตœ๋Œ€๊ฐ’

๊ณต๊ฐ„ ๋ณต์žก๋„ : O(k) -> k๋งŒํผ์˜ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์•ผ ํ•จ.

Counting์ด ํ•„์š” : ๊ฐ ์ˆซ์ž๊ฐ€ ๋ช‡ ๋ฒˆ ๋“ฑ์žฅํ–ˆ๋Š”์ง€ ์„ผ๋‹ค.

  • ์‚ฌ์šฉ : ์ •๋ ฌํ•˜๋Š” ์ˆซ์ž๊ฐ€ ํŠน์ •ํ•œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์„ ๋•Œ ์‚ฌ์šฉ

    (Suffix Array ๋ฅผ ์–ป์„ ๋•Œ, ์‹œ๊ฐ„๋ณต์žก๋„ O(nlgn)์œผ๋กœ ์–ป์„ ์ˆ˜ ์žˆ์Œ.)

  • ์žฅ์  : O(n) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„

  • ๋‹จ์  : ๋ฐฐ์—ด ์‚ฌ์ด์ฆˆ N ๋งŒํผ ๋Œ ๋•Œ, ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๋Š” Counting ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ํผ.

    (๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•จ)

ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌํ˜„

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•ด ํ•„์ˆ˜์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•  ๊ฐœ๋…

๋ธŒ๋ฃจํŠธ ํฌ์Šค(์™„์ „ ํƒ์ƒ‰)์œผ๋กœ๋Š” ์‹œ๊ฐ„์ดˆ๊ณผ์— ๋น ์ง€๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์—์„œ๋Š” ํ•ด์‹œ๋ฅผ ์ ์šฉ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

์—ฐ์Šต ๋ฌธ์ œ ๋งํฌ

โœจ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌํ˜„

ํ•ด์‹œ ํ…Œ์ด๋ธ”์€ ํƒ์ƒ‰์„ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด, input์— ๋Œ€ํ•œ key ๊ฐ’์„ ์–ป์–ด๋‚ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋™์  ๊ณ„ํš๋ฒ• (Dynamic Programming)

๋ณต์žกํ•œ ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํ•œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•

ํ”ํžˆ ๋งํ•˜๋Š” DP๊ฐ€ ๋ฐ”๋กœ '๋™์  ๊ณ„ํš๋ฒ•'

ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ, ๋‹จ ํ•œ ๋ฒˆ๋งŒ ํ’€๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

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

๋™์  ๊ณ„ํš๋ฒ•์€ Optimal Substructure์—์„œ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•œ๋‹ค.

Optimal Substructure : ๋‹ต์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ ํ–ˆ๋˜ ๋˜‘๊ฐ™์€ ๊ณ„์‚ฐ์„ ๊ณ„์† ๋ฐ˜๋ณตํ•˜๋Š” ๋ฌธ์ œ ๊ตฌ์กฐ

โœจ ์ ‘๊ทผ ๋ฐฉ์‹

์ปค๋‹ค๋ž€ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž‘๊ฒŒ ์ชผ๊ฐœ์„œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ธ ๋ถ„ํ•  ์ •๋ณต๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ์ค‘๋ณต ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ฐจ์ด์ ์ด ์กด์žฌํ•œ๋‹ค.

์ฆ‰, ๋™์  ๊ณ„ํš๋ฒ•์€ ๊ฐ„๋‹จํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค ์†์—์„œ '๊ณ„์† ๋ฐ˜๋ณต๋˜๋Š” ์—ฐ์‚ฐ'์„ ํ™œ์šฉํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ์ด๋‹ค.

โœจ ์กฐ๊ฑด

  • ์ž‘์€ ๋ฌธ์ œ์—์„œ ๋ฐ˜๋ณต์ด ์ผ์–ด๋‚จ

  • ๊ฐ™์€ ๋ฌธ์ œ๋Š” ํ•ญ์ƒ ์ •๋‹ต์ด ๊ฐ™์Œ

์ด ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์ด ์ถฉ์กฑํ•œ๋‹ค๋ฉด, ๋™์  ๊ณ„ํš๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ํ•ญ์ƒ ์ •๋‹ต์ด ๊ฐ™๊ณ , ๋ฐ˜๋ณต์ ์œผ๋กœ ์ผ์–ด๋‚œ๋‹ค๋Š” ์ ์„ ํ™œ์šฉํ•ด ๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization)์œผ๋กœ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

๋ฉ”๋ชจ์ด์ œ์ด์…˜(Memoization) : ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๋ฌธ์ œ๋Š” ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š๋„๋ก ์ €์žฅํ•ด๋‘๊ณ  ํ™œ์šฉํ•˜๋Š” ๋ฐฉ์‹

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

์ด๋•Œ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ†ตํ•ด ๊ฐ™์€ ์ž‘์—…์„ ๋˜ํ’€์ด ํ•˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ํšจ์œจ์ ์ด๋‹ค.

์ด์ฒ˜๋Ÿผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๊ณ„์† ๋ฐ˜๋ณต์ ์œผ๋กœ ์ด์šฉ๋  ๋•Œ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ €์žฅํ•ด๋‘๋ฉด ํšจ์œจ์ `

ํ”ผ๋ณด๋‚˜์น˜ ๊ตฌํ˜„์— ์žฌ๊ท€๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(2^n)์ด์ง€๋งŒ, ๋™์  ๊ณ„ํš๋ฒ•์„ ํ™œ์šฉํ•˜๋ฉด O(N)์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ ๊ตฌํ˜„ ๋ฐฉ์‹

  • Bottom-up : ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

  • Top-down : ํฐ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ํ’€๋ฆฌ์ง€ ์•Š์€ ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๋•Œ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• (์žฌ๊ท€ ๋ฐฉ์‹)

Bottom-up์€ ํ•ด๊ฒฐ์ด ์šฉ์ดํ•˜์ง€๋งŒ, ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง

Top-down์€ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€๋งŒ, ์ฝ”๋“œ ์ž‘์„ฑ์ด ํž˜๋“ฌ

๋™์  ๊ณ„ํš๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š”, ์šฐ์„  ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ž‘์€ ๋ฌธ์ œ๋“ค์„ ํ’€์–ด๋‚˜๊ฐ€๋‹ค๋ณด๋ฉด ์ด์ „์— ๊ตฌํ•ด๋‘” ๋” ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค. ์ด์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ฐพ์•˜์„ ๋•Œ ์ ํ™”์‹์„ ๋„์ถœํ•ด๋‚ด์–ด ๋™์  ๊ณ„ํš๋ฒ•์„ ์ ์šฉ์‹œํ‚ค์ž

ํƒ์š•๋ฒ• (Greedy)

๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ •ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ์œผ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ DP๊ฐ€ ์ ์šฉ๋˜๋Š” ์ด์œ ๋Š”, ๊ตณ์ด ํ•œ ๋ฒˆ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•œ ๊ณณ์€ ๋‹ค์‹œ ๊ตฌํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•ด ์ •์ ์—์„œ ์ •์ ๊นŒ์ง€ ๊ฐ„์„ ์„ ๋”ฐ๋ผ ์ด๋™ํ•  ๋•Œ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค.

  • ํ•ด๋‹น ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅ

  • ์ •์ ์„ ๋ฐฉ๋ฌธํ–ˆ๋Š” ์ง€ ์ €์žฅ

์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ์ •์ ๋“ค์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด๊ณผ, ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋‹ค์ต์ŠคํŠธ๋ผ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐ’์€ ๋ฌดํ•œ๋Œ€ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  2. ์‹œ์ž‘ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋Š” 0์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹œ์ž‘ ์ •์ ์„ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  3. ์‹œ์ž‘ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ๋“ค์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

  4. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์  ์ค‘ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ ์ตœ์†Œ์ธ ์ •์ ์„ ์ฐพ๋Š”๋‹ค.

  5. ์ฐพ์€ ์ •์ ์„ ๋ฐฉ๋ฌธ ์ฒดํฌ๋กœ ๋ณ€๊ฒฝ ํ›„, ํ•ด๋‹น ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ •์ ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ฐ’์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

  6. ๋ชจ๋“  ์ •์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ๊นŒ์ง€ 4~5๋ฒˆ์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

โœจ ๋‹ค์ต์ŠคํŠธ๋ผ ์ ์šฉ ์‹œ ์•Œ์•„์•ผํ•  ์ 

  • ์ธ์ ‘ ํ–‰๋ ฌ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N^2)์ด๋‹ค.

  • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N*logN)์ด๋‹ค.

    ์„ ํ˜• ํƒ์ƒ‰์œผ๋กœ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ๋Š” ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋กœ ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค. (์šฐ์„ ์ˆœ์œ„ ํ)

  • ๊ฐ„์„ ์˜ ๊ฐ’์ด ์–‘์ˆ˜์ผ ๋•Œ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Two Pointers Algorithm) ๋˜๋Š” ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ(Sliding Window)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๋ฒˆ์— 20๋…„๋„ ์ƒ๋ฐ˜๊ธฐ ๋ผ์ธ ๊ณต์ฑ„ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ์ด๋ฅผ ํ™œ์šฉํ•  ๋งŒํ•œ ๋ฌธ์ œ๊ฐ€ ๋‚˜์™”๋‹ค. ๊ทธ๋ž˜์„œ ์˜ˆ์ „์— ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ์„ ๋– ์˜ฌ๋ฆฌ๋ฉฐ, ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ ค ๊ธ€์„ ์“ด๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ข…์ข… ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ’€์–ด์•ผ ํ•˜๋Š”์ง€ ๊ทธ ๋‹น์‹œ ๊ฒ€์ƒ‰ํ–ˆ์„ ๋•Œ, ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด ๋Œ€์•ˆ์ด์—ˆ๋‹ค.

1์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ๊ณ , ์ด ๋ฐฐ์—ด์—์„œ ๊ฐ์ž ๋‹ค๋ฅธ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” 2๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์กฐ์ž‘ํ•ด๊ฐ€๋ฉด์„œ ์›ํ•˜๋Š” ๊ฒƒ์„ ์–ป๋Š” ํ˜•ํƒœ์ด๋‹ค. ์ด๋•Œ๋ฌธ์— ํˆฌํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

N์นธ์˜ 1์ฐจ์› ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ, ๋ถ€๋ถ„ ๋ฐฐ์—ด ์ค‘ ๊ทธ ์›์†Œ์˜ ํ•ฉ์ด M์ด ๋˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ฉด ๊ตฌ๊ฐ„ ํ•ฉ์„ ๊ตฌ๊ฐ„ ๋ฐฐ์—ด๋กœ O(1)๋งŒ์— ๊ตฌํ•œ๋‹ค๊ณ  ํ•ด๋„ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” O(N^2)์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์—†๋‹ค. N์˜ ์ตœ๋Œ€ ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ˆœ์—ด

BFS & DFS

๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ƒ๋‹นํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฐœ๋…์ด๋‹ค.

๋ฌธ์ œ์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ BFS์™€ DFS๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ๋Š” ๋ฐฑ์ค€์— ์žˆ๋Š” DFS์™€ BFS ๋ฌธ์ œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.

V : ์ •์ , E : ๊ฐ„์„ 

BFS

  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์ด๋ผ ํ•˜๋ฉฐ BFS(Breadth-First Search)๋ผ ๋ถ€๋ฅธ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ ํ˜น์€ ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•.

  • ์‹œ์ž‘ ์ •์ ์œผ๋กœ๋ถ€ํ„ฐ ๊ฐ€๊นŒ์šด ์ •์ ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ  ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋Š” ์ •์ ์„ ๋‚˜์ค‘์— ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœํšŒ ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ์ฆ‰, ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜๊ธฐ ์ „์— ๋„“๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ฃผ๋ณ€๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.)

  • ์ตœ์†Œ ๋น„์šฉ(์ฆ‰, ๋ชจ๋“  ๊ณณ์„ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ตœ์†Œ ๋น„์šฉ์ด ์šฐ์„ ์ผ ๋•Œ)์— ์ ํ•ฉํ•˜๋‹ค.

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

    • ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)

    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

DFS

  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์ด๋ฉฐ DFS(Depth-First Search)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ๋„“๊ฒŒ ํƒ์ƒ‰ํ•˜๊ธฐ ์ „์— ๊นŠ๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฏธ๋กœ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์† ๊ฐ€๋‹ค๊ฐ€ ๋” ์ด์ƒ ๊ฐˆ ์ˆ˜ ์—†๊ฒŒ ๋˜๋ฉด ๋‹ค์‹œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐˆ๋ฆผ๊ธธ๋กœ ๋Œ์•„์™€์„œ ์ด๊ณณ์œผ๋กœ๋ถ€ํ„ฐ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

  • ์Šคํƒ์ด๋‚˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.

  • ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋ฐฉ๋ฌธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉ์— ์ ํ•ฉํ•˜๋‹ค.

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

    • ์ธ์ ‘ ํ–‰๋ ฌ : O(V^2)

    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : O(V+E)

๊ทธ๋ž˜ํ”„ ๊ตฌํ˜„

ํƒ์ƒ‰

โœจ ์™„์ „ ํƒ์ƒ‰

  • ์ด์ง„ ํƒ์ƒ‰ ํ˜น์€ ์ด๋ถ„ ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์—์„œ ํŠน์ • ๊ฐ’์„ ์ฐพ์„ ๋•Œ, ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ ๊ฐ€๋ฉด์„œ ํ•ด๋‹น ๊ฐ’์„ ์ฐพ์•„๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ฆ‰, ํƒ์ƒ‰ ๋ฒ”์œ„๋ฅผ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•˜๋ฉด์„œ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๋Œ๋ฉด์„œ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

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

  • ์ „์ฒด ํƒ์ƒ‰ : O(N)

  • ์ด๋ถ„ ํƒ์ƒ‰ : O(logN)

์ง„ํ–‰ ์ˆœ์„œ

  • ์ •๋ ฌ์„ ํ•œ๋‹ค.

  • left์™€ right๋กœ mid ๊ฐ’์„ ์„ค์ •ํ•œ๋‹ค.

  • mid์™€ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

  • ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ํฌ๋ฉด -> left = mid + 1

  • ๊ตฌํ•  ๊ฐ’์ด mid๋ณด๋‹ค ๋‚ฎ์œผ๋ฉด -> right = mid - 1

  • right < left๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค

์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜

โœจ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ GCD(Greatest Common Divisor)

  • ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ๋‘ ์ž์—ฐ์ˆ˜์˜ ๊ณตํ†ต๋œ ์•ฝ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ex) 72์™€ 30์˜ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๋Š” 6์ด๋‹ค.

โœจ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ LCM(Least Common Multiple)

  • ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ๋‘ ์ž์—ฐ์ˆ˜์˜ ๊ณตํ†ต๋œ ๋ฐฐ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ์ž‘์€ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜ = ๋‘ ์ž์—ฐ์ˆ˜์˜ ๊ณฑ / ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜

  • ex) 72์™€ 30์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋Š” 360์ด๋‹ค.

โœจ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•(Euclidean Algorithm)

2๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด 2๋ถ€ํ„ฐ ๋‘ ์ž์—ฐ์ˆ˜ ์ค‘ ์ž‘์€ ์ž์—ฐ์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ๋‚˜๋ˆ„์–ด๋ณด๋ฉด์„œ ๊ฐ€์žฅ ํฐ ๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ด ๋œ๋‹ค. ๋‚˜์œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ, ๋ณด๋‹ค ํšจ์œจ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋ฉฐ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์ด๋ž€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ O(logN)์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ˜ธ์ œ๋ฒ•์ด๋ž€? ๋‘ ์ˆ˜๊ฐ€ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๊ฒฐ๊ตญ ์›ํ•˜๋Š” ์ˆ˜๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•

์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด (LIS)

โœจ LIS (Longest Increasing Sequence)

์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด : ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

[ 7, 2, 3, 8, 4, 5 ] โ†’ ํ•ด๋‹น ๋ฐฐ์—ด์—์„œ๋Š” [2,3,4,5]๊ฐ€ LIS๋กœ ๋‹ต์€ 4

โœจ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• (์‹œ๊ฐ„๋ณต์žก๋„)

  1. DP : O(N^2)

  2. Lower Bound : O(NlogN)

โœจ DP ํ™œ์šฉ ์ฝ”๋“œ

์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ (LCA)

โœจ LCA(Lowest Common Ancestor) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

โ†’ ๋‘ ์ •์ ์ด ๋งŒ๋‚˜๋Š” ์ตœ์ดˆ ๋ถ€๋ชจ ์ •์ ์„ ์ฐพ๋Š” ๊ฒƒ!

๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)

์ง‘ํ•ฉ์˜ ์š”์†Œ๋“ค์˜ ๊ตฌ์„ฑ ์—ฌ๋ถ€๋ฅผ ํ‘œํ˜„ํ•  ๋•Œ ์œ ์šฉํ•œ ํ…Œํฌ๋‹‰

โœจ ์™œ ๋น„ํŠธ๋งˆ์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?

  • DP๋‚˜ ์ˆœ์—ด ๋“ฑ, ๋ฐฐ์—ด ํ™œ์šฉ๋งŒ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ

  • ์ž‘์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋น ๋ฅธ ์ˆ˜ํ–‰์‹œ๊ฐ„์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅ (But, ์›์†Œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š์•„์•ผ ํ•จ)

  • ์ง‘ํ•ฉ์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

  • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง

โœจ ๋น„ํŠธ(Bit)๋ž€?

์ปดํ“จํ„ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ์†Œ ๋‹จ์œ„ (0๊ณผ 1)

2์ง„๋ฒ•์„ ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค.

โœจ ๋น„ํŠธ ์—ฐ์‚ฐ

AND, OR, XOR, NOT, SHIFT

  • AND(&) : ๋Œ€์‘ํ•˜๋Š” ๋‘ ๋น„ํŠธ๊ฐ€ ๋ชจ๋‘ 1์ผ ๋•Œ, 1 ๋ฐ˜ํ™˜

  • OR(|) : ๋Œ€์‘ํ•˜๋Š” ๋‘ ๋น„ํŠธ ์ค‘ ๋ชจ๋‘ 1์ด๊ฑฐ๋‚˜ ํ•˜๋‚˜๋ผ๋„ 1์ผ๋•Œ, 1 ๋ฐ˜ํ™˜

  • XOR(^) : ๋Œ€์‘ํ•˜๋Š” ๋‘ ๋น„ํŠธ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ๋•Œ, 1 ๋ฐ˜ํ™˜

  • NOT(~) : ๋น„ํŠธ ๊ฐ’ ๋ฐ˜์ „ํ•˜์—ฌ ๋ฐ˜ํ™˜

  • SHIFT(>>, <<) : ์™ผ์ชฝ ํ˜น์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋น„ํŠธ ์˜ฎ๊ฒจ ๋ฐ˜ํ™˜

    • ์™ผ์ชฝ ์‹œํ”„ํŠธ : A * 2^B

    • ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ : A / 2^B

    [์™ผ ์ชฝ] 0001 โ†’ 0010 โ†’ 0100 โ†’ 1000 : 1 โ†’ 2 โ†’ 4 โ†’ 8 [์˜ค๋ฅธ์ชฝ] 1000 โ†’ 0100 โ†’ 0010 โ†’ 0001 : 8 โ†’ 4 โ†’ 2 โ†’ 1

๋น„ํŠธ์—ฐ์‚ฐ ์—ฐ์Šต๋ฌธ์ œ : ๋ฐฑ์ค€ 12813

Iru cache (Least Recently Used)

โœจ Cache ๊ฐœ๋…

์บ์‹œ๋Š” ๋ฐ์ดํ„ฐ๋‚˜ ๊ฐ’์„ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“๋Š” ์ž„์‹œ ์žฅ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์บ์‹œ๋Š” ์ ‘๊ทผ ์‹œ๊ฐ„์— ๋น„ํ•ด ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ๋‚˜ ๊ฐ’์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค. ์บ์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๋ณต์‚ฌํ•ด ๋†“์œผ๋ฉด ๊ณ„์‚ฐ์ด๋‚˜ ์ ‘๊ทผ ์‹œ๊ฐ„ ์—†์ด ๋น ๋ฅธ ์†๋„๋กœ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (์บ์‹œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค์˜ ์–‘๋„ ์ œํ•œ์ด ์žˆ๋‹ค.)

โœจ LRU Cache ๊ฐœ๋…

LRU๋Š” Least Recently Used์˜ ์•ฝ์ž๋กœ OS์˜ ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜๋กœ ์ตœ๊ทผ์— ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์บ์‹œ์— ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•œ๋‹ค.

โœจ LRU Cache ๊ตฌํ˜„

LRU Cache ๊ตฌํ˜„์€ Doubly Linked List๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. head์— ๊ฐ€๊นŒ์šด ๋ฐ์ดํ„ฐ์ผ์ˆ˜๋ก ์ตœ๊ทผ์— ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ์ด๊ณ , tail์— ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ๊ฐ€์žฅ ๋จผ์ € ์‚ญ์ œ๋˜๋„๋ก ํ•œ๋‹ค.

์‚ฝ์ž…๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด head๋กœ ์˜ฎ๊ฒจ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ด๊ฒŒ ๋˜๊ณ , ์‚ญ์ œ๋  ์šฐ์„ ์ˆœ์œ„์—์„œ ๋ฉ€์–ด์ง€๊ฒŒ ๋œ๋‹ค.

Last updated