๐Ÿ“•[์ฑ…] ์ฝ”๋”ฉ ์ธํ„ฐ๋ทฐ ์™„์ „ ๋ถ„์„

์ด๊ฐ•์šฑยท2023๋…„ 10์›” 23์ผ
0

๐Ÿ“•์ฑ…

๋ชฉ๋ก ๋ณด๊ธฐ
3/4

์„ธ ๋ฒˆ์งธ ์ฑ…๋„ˆ๋‘ ๋„์ „. ๋ฒŒ์จ 7๊ธฐ.
ํšŒ์‚ฌ ๋™๋ฃŒ์˜€๋˜ ๋ฏผ๊ทœ๋‹˜์˜ ์ถ”์ฒœ์œผ๋กœ ์•Œ๊ฒŒ๋œ ์ฑ…. ์ฑ…๋„ˆ๋‘ ๋…์„œ ๋ชฉ๋ก์— ์žˆ๊ธธ๋ž˜ ๋ฐ”๋กœ ์‹ ์ฒญํ–ˆ๋‹ค.

์ฒซ๋‚  ๋‹ค์ง

์ „๋ฐ˜์ ์ธ ๋‚ด์šฉ

์‹ค๋ฆฌ์ฝ˜ ๋ฒจ๋ฆฌ์—์„œ ์‹ค์ œ๋กœ ์ด๋ค„์ง€๋Š” ๊ธฐ์ˆ ๋ฉด์ ‘ ๋ฌธ์ œ๋“ค์„ ์†Œ๊ฐœํ•˜๊ณ , ๊ทธ์— ๋Œ€ํ•œ ์ „๋žต์ /์‹ค์šฉ์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ์ œ์‹œํ•˜๋Š” ์ฑ…์ธ๋“ฏ.
์‹ค์ „(๋ฉด์ ‘)์—์„œ ํ–‰ํ•ด์ง€๋Š” Problem Solving์„ ์˜ˆ์‹œ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด ์—ฐ์Šต์‹œ์ผœ ์ฃผ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ์ข€ ์–ด๋ ค์›Œ ๋ณด์ธ๋‹ค.
์ €์ž์™€ ์˜ฎ๊ธด์ด์˜ ์ด๋ ฅ์ด ํ™”๋ คํ•˜๋‹ค.
์ฑ…์ด ๋ฌด๋ ค 904์ชฝ์ด๋‚˜ ๋œ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ ์ฑ…์ด ๋„ˆ๋ฌด ๋‘๊ป๋‹ค...
<๋ฐœ์ทŒ>
๊ทธ๋ฆฌ๊ณ  ๊ธฐ์–ตํ•˜์„ธ์š”. ๋ฉด์ ‘์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค! ('์ง€์€์ด์˜ ๊ธ€' ไธญ)

๋…์„œ ์ „๋žต

์ตœ๋Œ€ํ•œ ์ ์‹ฌ์‹œ๊ฐ„์„ ํ™œ์šฉํ•ด์„œ ๋…์„œํ•˜๊ฒ ๋‹ค. ์ ์‹ฌ ๋„์‹œ๋ฝ ๊ตฌ๋…ํ•ด์•ผ๊ฒ ๋‹ค.
ํ•˜๋‚˜์˜ ํฌ์ŠคํŠธ์— ๊ณ„์† ์—…๋ฐ์ดํŠธ ํ•˜๋ฉด์„œ ์ •๋ฆฌํ•˜๊ฒ ๋‹ค.
์ฑ…์˜ ๋ชฉ์ฐจ ๊ทธ๋Œ€๋กœ ๋…์„œ์ผ์ง€ ๊ตฌ์กฐ๋ฅผ ์žก์•„๋ณผ๊นŒ ์ƒ๊ฐ ์ค‘.

๋‹ค์ง

์ €๋ฒˆ์— node.js ๋””์ž์ธ ํŒจํ„ด ์ฑ…์„ ์ฒซ์ฃผ์— ๋ฐ”๋กœ ๋“œ๋žํ–ˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—” ๊ทธ๋Ÿฌ์ง€ ๋ง์•„์•ผ๊ฒ ๋‹ค.
์žฌ๋ฐŒ๊ฒŒ ๊พธ์ค€ํžˆ ์ฝ์–ด๋ณด์ž!!

๋ฉด์ ‘ ๊ณผ์ •

๋ฌธ์ œํ’€์ด(problem solving) ๋Šฅ๋ ฅ์„ ๋ณด์—ฌ์ค˜์•ผํ•จ. ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฝ”๋”ฉ์œผ๋กœ.
๊ตฌ์ฒด์ ์œผ๋กœ๋Š”,

  1. ๋ถ„์„ ๋Šฅ๋ ฅ : ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์–ผ๋งˆ๋‚˜ ๋„์›€์„ ๋ฐ›์•˜๋Š”์ง€, ๊ฑธ๋ฆฐ ์‹œ๊ฐ„, ์ตœ์ ํ™”, ๋””์ž์ธ/์„ค๊ณ„
  2. ์ฝ”๋”ฉ ๋Šฅ๋ ฅ : ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์ ˆํ•œ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋Šฅ๋ ฅ, ์—๋Ÿฌ์ฒ˜๋ฆฌ, ์Šคํƒ€์ผ
  3. ๊ธฐ์ˆ ์  ์ง€์‹ ๋ฐ ์ปดํ“จํ„ฐ ๊ณผํ•™ ๊ธฐ๋ณธ
  4. ๊ฒฝํ—˜ : ๊ธฐ์ˆ ์ ์ธ ๊ฒฐ์ •, ํ”„๋กœ์ ํŠธ
  5. ๋ฌธํ™” / ์˜์‚ฌ์†Œํ†ต

์ง€์›์ž๋“ค์ด ํ”ํžˆ ํ•˜๋Š” ๋ถˆํ‰ ๊ณผ ๊ธ€์“ด์ด์˜ ์ผ๊ฐˆ.

  1. ๋งŽ์€ ์ˆ˜์˜ ํ›Œ๋ฅญํ•œ ์ง€์›์ž๋“ค์€ ์ด๋Ÿฐ ๋ฐฉ์‹์˜ ๋ฉด์ ‘์„ ์ž˜ ํ•˜์ง€ ๋ชปํ•จ
    -> ๋ถ€์ • ์˜ค๋ฅ˜(false negative)๋Š” ์‚ฌ์‹ค ๊ดœ์ฐฎ๋‹ค. ์ฆ‰, ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ์„ ๋†“์น˜๋Š” ๊ฒƒ์€ ๊ดœ์ฐฎ๋‹ค. ๊ทธ๊ฒƒ๋ณด๋‹จ ๋ชปํ•˜๋Š” ์‚ฌ๋žŒ์„ ์‹ค์ˆ˜๋กœ ๋ฐ๋ ค์˜ค๋Š” ๊ฒƒ์ด ๋” ๊ฑฑ์ •.
    -> ๋ฌธ์ œ ํ’€์ด ๋Šฅ๋ ฅ์€ ๊ฐ€์น˜์žˆ๋‹ค. ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋Ÿฐ ์‚ฌ๋žŒ๋“ค์€ ๋˜‘๋˜‘ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ข‹์€ ์ผ์„ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
  2. ์ด๋ฏธ ๋‚˜์˜จ ๋ฌธ์ œ๋Š” ํ•ด๋ฒ•์„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค ๊ทธ๋ฆฌ๊ณ 
  3. ์‹ค๋ฌด์—์„  ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์“ด๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ณต๋ถ€ํ•  ๊ฒƒ
    -> ๊ธฐ์ดˆ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ง€์‹์€ ์œ ์šฉํ•˜๋‹ค. ์ด์ง„ ํƒ์ƒ‰ํŠธ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ง€๋„ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„  ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ•˜๊ธด ์–ด๋ ต๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณผ ํ›Œ๋ฅญํ•œ ๊ฐœ๋ฐœ์ž ์‚ฌ์ด์— ๊ฝค ๋ฏฟ์„๋งŒํ•œ ์—ฐ๊ด€์ด ์žˆ๋‹ค๊ณ  ์•Œ๋ ค์ ธ ์žˆ๋‹ค. ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—†์ด ๋ฌธ์ œํ’€์ด ๋Šฅ๋ ฅ์„ ์ธก์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ธฐ๊ฐ€ ์–ด๋ ต๊ธฐ๋„ ํ•˜๋‹ค.
  4. ์‹ค๋ฌด์—์„œ ํ™”์ดํŠธ๋ณด๋“œ์— ์ฝ”๋”ฉํ•  ์ผ์€ ํ™•์‹คํžˆ ์—†๋‹ค.
    -> ํ™”์ดํŠธ๋ณด๋“œ ์ฝ”๋”ฉ์˜ ์ข‹์€ ์ ์€ 'ํฐ ๊ทธ๋ฆผ'์„ ๊ทธ๋ฆฌ๋Š” ๋ฐ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ํด๋ž˜์Šค ์ •์˜๋‚˜ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด, ์‹ค์ œ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚ด๋Š” ํ•จ์ˆ˜ ๋ถ€๋ถ„์—๋งŒ ์‹ ๊ฒฝ์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ™”์ดํŠธ๋ณด๋“œ๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ ์ง€์›์ž๊ฐ€ ์ž์‹ ์˜ ์ƒ๊ฐ์„ ์ข€ ๋” ์†Œ๋ฆฌ๋‚ด์–ด ์„ค๋ช…ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค.

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

์žฅ๋ง‰ ๋„ˆ๋จธ (Behind the Scenes)

๋ฉด์ ‘ ๋Œ€์ƒ์ž๋กœ ์„ ์ •๋˜๋ฉด, ๋ณดํ†ต ์‚ฌ์ „ ๋ฉด์ ‘(screening interview)์„ ํ•จ. ๋งŒ์•ฝ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•ด๋‹น ๋ฉด์ ‘์— ์ฐธ์—ฌํ•˜๋ฉด ๊ธฐ์ˆ ์ ์ธ ์งˆ๋ฌธ์ด ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
๋Œ€๋ฉด ๋ฉด์ ‘์€ ๋ณดํ†ต 3 ~ 6 ๋ฒˆ ์ •๋„. ๊ทธ ์ค‘์— ์ ์‹ฌ์‹์‚ฌ๋ฅผ ๊ฐ™์ด ํ•˜๋Š” ๋ฉด์ ‘์ด ์žˆ๊ธฐ๋„ ํ•˜๋‚˜ ๊ธฐ์ˆ ์ ์ธ ๋ฌธ์ œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š๊ณ  ํ‰๊ฐ€์— ํฌํ•จ๋˜์ง€ ์•Š๊ธฐ๋„ ํ•œ๋‹ค. ํ‰์†Œ ๊ด€์‹ฌ์‚ฌ, ํšŒ์‚ฌ ๋ฌธํ™”์— ๋Œ€ํ•ด ์งˆ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ธฐํšŒ.

<๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋ฉด์ ‘>

  • geek, ๊ธฐ์ˆ ์— ์—ด์ •์ ์ธ ์‚ฌ๋žŒ์„ ์›ํ•จ.

<์•„๋งˆ์กด ๋ฉด์ ‘>

  • ๋‚œ์ด๋„ ์กฐ์ •๊ถŒ์ž(bar raiser) ์—ญํ• ์„ ๋งก์€ ๋ฉด์ ‘๊ด€์ด ํ•œ ๋ช…์”ฉ ์žˆ๋‹ค. ๋ฉด์ ‘ ๋ฌธํ„ฑ(interview bar)๋ฅผ ๋†’์ด๋Š” ์—ญํ• . ์–ด๋–ค ๋ฉด์ ‘์ด ํŠน๋ณ„ํžˆ ๋‹ค๋ฅด๊ณ  ์–ด๋ ต๋‹ค๋ฉด ๊ทธ ๋ฉด์ ‘๊ด€์ด ๋‚œ์ด๋„ ์กฐ์ •๊ถŒ์ž ์ผ ๊ฒƒ.
  • ์•„๋งˆ์กด์€ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ(scalability)์— ์‹ ๊ฒฝ์„ ๋งŽ์ด ์”€. ๋˜ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ๋””์ž์ธ์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋งŽ์ด ํ•˜๋Š” ๊ฒฝํ–ฅ.

<๊ตฌ๊ธ€ ๋ฉด์ ‘>

  • ์–ด๋ ต๋‹ค๋Š” ์†Œ๋ฌธ์ด ๋งŽ์ง€๋งŒ, ๋งˆ์†Œ๋‚˜ ์•„๋งˆ์กด ๋ฉด์ ‘๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Œ.
  • ์ „ํ™” ์‚ฌ์ „ ๋ฉด์ ‘์„ ๊ตฌ๊ธ€ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์ง์ ‘ ๋ณด๋Š”๋ฐ, ๊ธฐ์ˆ ์  ๋ฌธ์ œ๊ฐ€ ๊นŒ๋‹ค๋กญ๊ฒŒ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์Œ.
  • ๊ทœ๋ชจ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ(scalable system)์„ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š๋ƒ์— ๊ด€์‹ฌ. ๊ทธ๋ฆฌ๊ณ  ๊ฒฝ๋ ฅ๋ณด๋‹ค๋Š” ๋ถ„์„(์•Œ๊ณ ๋ฆฌ์ฆ˜) ๋Šฅ๋ ฅ์— ํฐ ๋น„์ค‘.

<์• ํ”Œ ๋ฉด์ ‘>

  • ์ ์‹ฌ์ด ๋ฉด์ ‘์˜ ์ผ๋ถ€
  • ๋ฉด์ ‘ ๋ณผ ํŒ€์—์„œ ๋งŒ๋“  ์ œํ’ˆ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์Œ.
  • ์• ํ”Œ ์ œํ’ˆ์— ๋Œ€ํ•œ ์—ด์ •์ด ์žˆ์œผ๋ฉด ์ข‹์Œ.

<ํŽ˜์ด์Šค๋ถ ๋ฉด์ ‘>

  • ์ „ํ™” ๋ฉด์ ‘ ํ›„ ์ˆ™์ œ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฝ”๋”ฉ ์Šคํƒ€์ผ์— ์‹ ๊ฒฝ์จ์•ผํ•จ.
  • ๊ธฐ์—…๊ฐ€ ์ •์‹  (๋น ๋ฅด๊ฒŒ ๊ฒฐ๊ณผ) ์„ ์ข‹์•„ํ•จ.
  • ์–ธ์–ด ์„ ํƒ์— ๊ตฌ์•  ๋ฐ›์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋žŒ. ํŽ˜์ด์Šค๋ถ์€ C++, ํŒŒ์ด์ฌ, ์–ผ๋žญ ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค. ๋ฌผ๋ก  PHP๋„ ํฌํ•จ.
  • ํŠน์ • ํŒ€ ๋ณด๋‹ค๋Š” ์ „์‚ฌ์ ์ธ ๊ด€์ ์—์„œ ๋ฉด์ ‘์ด ์ง„ํ–‰๋จ. ์ฑ„์šฉ ํ›„์—๋„ ๋ถ€ํŠธ์บ ํ”„ ๋ผ๋Š” ํ›ˆ๋ จ๊ณผ์ •์„ ๊ฑฐ์นœ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ ํƒ.

<ํŒฐ๋Ÿฐํ‹ฐ์–ด ๋ฉด์ ‘> (๋ฏธ๊ตญ์˜ ๋น… ๋ฐ์ดํ„ฐ ํ”„๋กœ์„ธ์‹ฑ ๊ธฐ์—…. CIA, FBI, FDA, ๋ฏธ๊ตญ๋ฐฉ๋ถ€ ๋“ฑ ์ •๋ถ€ ์‚ฌ์—… ๋งŽ์ด ํ•จ. ๋‚˜๋ฌด์œ„ํ‚ค)

  • ํŠน์ • ํŒ€์„ ์œ„ํ•ด ๋ฉด์ ‘์„ ๋ด„.
  • ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ํ›„๊ธฐ๊ฐ€ ๋งŽ๋‹ค.
  • ์–ด๋ ต๋‹ค. ๋ฌธ์ œ๊ฐ€ ๊ทน๋„๋กœ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค.

ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์—์„œ์˜ ๋ฉด์ ‘

์ด๊ฒƒ ๋˜ํ•œ ์—ฌ์ง€ ์—†์ด '๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚ด๋Š” ๋Šฅ๋ ฅ: ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ฝ”๋”ฉ' ์ด ๊ฐ€์žฅ ์ค‘์š”.

[๊ฒฝ๋ ฅ์ž]
์‹œ์Šคํ…œ ๋””์ž์ธ ๋ฐฉ๋ฉด์˜ ๊ฒฝํ—˜์€ ์ง์—…์ ์œผ๋กœ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์—ฌ๊ฒจ์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์‹œ์Šคํ…œ ๋””์ž์ธ/์„ค๊ณ„ ์™€ ๊ด€๋ จ๋œ ์งˆ๋ฌธ์„ ๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

[ํ…Œ์Šคํ„ฐ or SDET(Software Design Engineers in Test)]
์‹ค์ œ ์ œํ’ˆ์ด ์•„๋‹Œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ง๊ตฐ.
์ฝ”๋”ฉ๊ณผ ํ…Œ์ŠคํŠธ ๋‘˜ ๋‹ค ์ž˜ํ•ด์•ผํ•จ.
SDET์—์„œ ๊ฐœ๋ฐœ ์ง์œผ๋กœ ์ง๋ฌด ์ „ํ™˜ ํ•˜๊ธฐ๋Š” ์•„์ฃผ ์–ด๋ ต๋‹ค. ์‹ ์ค‘ํžˆ ๊ฒฐ์ •ํ•  ๊ฒƒ.

[PM]
์ฝ”๋”ฉ๊ณผ ๊ด€๊ณ„๋œ ์ผ์„ ์ฃผ๋กœ ํ•˜๋Š” PM๋“ค์€ ์ฝ”๋”ฉ๋„ ์ž˜ํ•ด์•ผ ํ•จ.

  • ๋ชจํ˜ธํ•œ ์ƒํ™ฉ์— ์ž˜ ๋Œ€์‘ํ•˜๋Š”๊ฐ€
  • ๊ณ ๊ฐ์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ํƒœ๋„(๊ณ ๊ฐ ์ค‘์‹ฌ์  ์‚ฌ๊ณ )์™€ ๊ธฐ์ˆ (์ œํ’ˆ์— ๋Œ€ํ•œ ์ดํ•ด๋„)์„ ์ง€๋…”๋Š”๊ฐ€
  • ๋‹ค์ธต์  ์˜์‚ฌ์†Œํ†ต ๋Šฅ๋ ฅ
  • ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ์—ด์ •
  • ํŒ€์›Œํฌ/๋ฆฌ๋”์‹ญ

[๊ฐœ๋ฐœ ์ฑ…์ž„์ž(dev lead) ์™€ ๊ด€๋ฆฌ์ž]
์ฝ”๋”ฉ ๋Šฅ๋ ฅ๊ณผ ์ธ์„ฑ.

[์Šคํƒ€ํŠธ์—…]
๊ฐœ์ธ์ ์œผ๋กœ ์ถ”์ฒœ์„ ๋ฐ›์•„์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฒ ์ŠคํŠธ.
๋ฐ”๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋”ฉ ๋Šฅ๋ ฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์—…๊ฐ€์  ์ž์งˆ์ด ์š”๊ตฌ๋˜๋Š” ํ™˜๊ฒฝ.
๋Œ€๊ธฐ์—…์€ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ์ผ๋ฐ˜์  ์ ์„ฑ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ˜๋ฉด, ์Šคํƒ€ํŠธ์—…์€ ์ง€์›์ž์˜ ์ธ์„ฑ, ๊ธฐ์ˆ , ๊ณผ๊ฑฐ ๊ฒฝ๋ ฅ์„ ์ž์„ธํžˆ ๋“ค์–ด๋‹ค๋ณด๋Š” ๊ฒฝํ–ฅ.

[๊ธฐ์—… ์ธ์ˆ˜ ๋ฐ ์ธ์žฌ ์˜์ž…]
๊ธฐ์—… ์ธ์ˆ˜ ์‹œ์—, ๋ชจํšŒ์‚ฌ๊ฐ€ ์Šคํƒ€ํŠธ์—…์˜ ์ „์ง์›๊ณผ ๋ฉด์ ‘์„ ํ•˜๊ณ ์ž ํ•  ์ˆ˜ ์žˆ์Œ.
์ด ๋ฉด์ ‘์€, ํ•ด๋‹น ๋ชจํšŒ์‚ฌ์˜ ์ผ๋ฐ˜์ ์ธ ์ง€์›์ž์™€ ๊ฑฐ์˜ ๋น„์Šทํ•œ ๋ฉด์ ‘์„ ๋ณด๊ฒŒ ๋  ๊ฒƒ. (์ด ์ฑ…์— ๋‚˜์˜ค๋Š” ๋ฉด์ ‘ ๋‚ด์šฉ๊ณผ ๊ต‰์žฅํžˆ ๋น„์Šทํ•ด์งˆ ๊ฒƒ)
๋–จ์–ด์ง€๋ฉด, ์ธ์ˆ˜๋  ํšŒ์‚ฌ์— ์ž…์‚ฌํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ๋Œ€๋‹ค์ˆ˜์˜ ์ง์›์ด ๋ฉด์ ‘์„ ๋ง์น˜๋ฉด ์ธ์ˆ˜ ์ž์ฒด๊ฐ€ ๋ฌด์‚ฐ๋  ์ˆ˜ ์žˆ๋‹ค.
์ „์‚ฌ์ ์œผ๋กœ ํ•จ๊ป˜ ๋ฉด์ ‘์„ ์ค€๋น„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ณ , ์‹œ๊ฐ„์  ์—ฌ์œ ๋ฅผ ๋„ˆ๋ฌด ๋ถ€๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Œ.

[๋ฉด์ ‘๊ด€๋“ค์—๊ฒŒ ์ฃผ๋Š” ์กฐ์–ธ]

  • ํ•œ ๊ฐ€์ง€ ํžŒํŠธ๋‚˜ ์กฐ์–ธ์ด ๋ฌธ์ œ ํ’€์ด์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค๋ฉด, ๊ทธ ๋ฌธ์ œ๋Š” ์ข‹์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค.
  • ์ง€์‹ ์ž์ฒด๋ฅผ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ๋งฅ๋ฝ์—์„œ, ์ง€์›์ž์—๊ฒŒ ๊ธฐ๋Œ€ํ•ด๋„ ๋  ๋งŒํ•œ ์ง€์‹์€ ๋„๋ฆฌ ์ž˜ ์•Œ๋ ค์ง„ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜.
  • ๋ฉ€๋ฆฌ์„œ ๋ดค์„ ๋•Œ, ๋ฉด์ ‘ ์งˆ๋ฌธ์—๋Š” ๋„ค ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌ
    1. sanity check : ์‰ฌ์šด ๋ฌธ์ œ. ์ตœ์•…์„ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•จ.
    2. quality check : ๋ฌธ์ œ๊ฐ€ ์ฒ ์ €ํžˆ ์„ค๊ณ„๋˜์–ด ์žˆ๊ณ , ์ง€์›์ž๋กœ ํ•˜์—ฌ๊ธˆ ์ƒ๊ฐํ•˜๊ฒŒ๋” ๋งŒ๋“ค์–ด์ง. ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋ฌธ์ œํ’€์ด ๋Šฅ๋ ฅ์„ ์ž˜ ์ธก์ •ํ•  ์ˆ˜ ์žˆ์Œ.
    3. specialist questions : ์ž๋ฐ”๋‚˜ ๋จธ์‹ ๋Ÿฌ๋‹ ๊ฐ™์€ ํŠน์ • ๋ถ„์•ผ์˜ ์ „๋ฌธ์ง€์‹๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ. ์‹ค์ œ ํ•ด๋‹น ๋ถ„์•ผ ์ „๋ฌธ๊ฐ€๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ์ œ.
    4. proxy knowledge : ์ „๋ฌธ ๋ถ„์•ผ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ๊ธด ํ•˜๋‚˜, ์ง€์›์ž์˜ ํ˜„์žฌ ๋ ˆ๋ฒจ์—์„œ ์•Œ๊ณ  ์žˆ์„๋ฒ•ํ•œ ์ง€์‹์— ๊ด€ํ•œ ๋ฌธ์ œ.

๋ฉด์ ‘ ์ „์—

[์ด๋ ฅ์„œ ์ค€๋น„]
ํ›Œ๋ฅญํ•œ ๊ฒฝํ—˜ -> ํƒ„ํƒ„ํ•œ ์ด๋ ฅ์„œ -> ๋ฉด์ ‘ ๊ธฐํšŒ ํš๋“
์ด๋ฏธ ์ง์žฅ์ธ์ธ ๊ฒฝ์šฐ,

  1. ์–ป์„๊ฒŒ ๋งŽ์€ ํ”„๋กœ์ ํŠธ์— ์ง‘์ค‘ํ•  ๊ฒƒ
    • ์ฝ”๋”ฉ์„ ๋งŽ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์—…๋ฌด
    • ๊ฐ€๋Šฅํ•˜๋ฉด ๋Œ€ํ˜• ํ”„๋กœ์ ํŠธ
    • ๊ด€๋ จ ๊ธฐ์ˆ ์„ ๋งŽ์ด ์‚ฌ์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ
  2. ์—…๋ฌด ์™ธ์—, ์žฌ๋ฏธ๋กœ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒฝํ—˜์„ ํ•  ๊ฒƒ

๊ฒฐ๊ตญ, ์ฝ”๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์˜๋ฆฌํ•œ ์‚ฌ๋žŒ์ž„์„ ๋ณด์—ฌ์ค˜์•ผ ํ•จ.

[์ด๋ ฅ์„œ ์ž‘์„ฑ]
์ด๋ ฅ์„œ๋Š” ์งง์œผ๋ฉด ์งง์„ ์ˆ˜๋ก ์ธ์ƒ์— ๋‚จ๋Š”๋‹ค.
๋ฏธ๊ตญ์—์„œ๋Š” ๊ฒฝ๋ ฅ์ด ์‹ญ ๋…„ ๋ฏธ๋งŒ์ธ ๊ฒฝ์šฐ ์ด๋ ฅ์„œ๋ฅผ ํ•œ ํŽ˜์ด์ง€๋กœ ๋งŒ๋“ค๋„๋ก ๊ถŒ์žฅ
๊ตฌ์ธ ๋‹ด๋‹น์ž๋Š” ์ด๋ ฅ์„œ๋ฅผ ๊ธฐ๊ปํ•ด์•ผ 10์ดˆ ์ •๋„ ๋ด„. ์–ด๋–ค ์‚ฌ๋žŒ์€ ๊ธด ์ด๋ ฅ์„œ๋ฅผ ์•„์˜ˆ ๋ฌด์‹œํ•ด ๋ฒ„๋ฆฌ๊ธฐ๋„

์ด๋ ฅ์„œ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ์–ธ

  • ๊ฒฝ๋ ฅ ์‚ฌํ•ญ
    • "Y๋ฅผ ๊ตฌํ˜„ํ•ด์„œ X๋ฅผ ์„ฑ์ทจํ–ˆ๊ณ , ๊ทธ ๊ฒฐ๊ณผ Z๋ฅผ ์ด๋ฃจ์—ˆ๋‹ค."
      • e.g. ๋ถ„์‚ฐ ์บ์‹œ๋ฅผ ๊ตฌํ˜„ํ•ด์„œ ์˜ค๋ธŒ์ ํŠธ ๋ Œ๋”๋ง ์‹œ๊ฐ„์„ 75% ์ค„์˜€๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๋กœ๊ทธ์ธ ์‹œ๊ฐ„์„ 10% ๊ฒฝ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
    • ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€๊ธ‰์  ์ธก์ • ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ
  • ํ”„๋กœ์ ํŠธ
    • ๊ฐ€์žฅ ์ค‘์š”ํ–ˆ๋˜ ํ”„๋กœ์ ํŠธ 2~4๊ฐœ
    • ๋ฌด์Šจ ํ”„๋กœ์ ํŠธ ์˜€๊ณ  ์–ด๋–ค ์–ธ์–ด/๊ธฐ์ˆ  ์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€
  • ์–ธ์–ด
    • ๊ฐ€๋Šฅํ•˜๋ฉด ์‚ฌ์šฉํ–ˆ๋˜ ๋ชจ๋“  ์–ธ์–ด๋ฅผ ์ ๋˜, ์–ธ์–ด์— ๋Œ€ํ•œ ์ˆ™๋ จ๋„๋„ ํ•จ๊ป˜. (๊ธฐ๊ฐ„์œผ๋กœ ์ ๋Š” ๊ฒƒ์€ ๋ณ„๋กœ)

์•„๋ž˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋“ค์€ '๋‚™์ธ'์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜๋™ ์žˆ์Œ

  • ํŠน์ • ์–ธ์–ด์˜ ์‚ฌ์šฉ
    • ๊ธฐ์—… ์–ธ์–ด (e.g. ๋น„์ฃผ์–ผ ๋ฒ ์ด์ง or .NET ํ”Œ๋žซํผ ์–ธ์–ด) ๋Š” ์‰ฌ์šด ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ.
    • ์ด ์™ธ์—๋„ ํ•˜๋‚˜์˜ ์–ธ์–ด์— ์ง€๋‚˜์น˜๊ฒŒ ๋ชฐ์ž…๋œ ๊ฒฝ์šฐ๋Š” '์ข‹์€ ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด'๋ผ๋Š” ์ธ์ƒ์„ ์ค„ ์ˆ˜ ์—†์Œ
  • ์ž๊ฒฉ์ฆ
    • ํšŒ์‚ฌ์— ๋”ฐ๋ผ ์ž๊ฒฉ์ฆ์„ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํŽธ๊ฒฌ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ
  • ํ•œ๋‘ ๊ฐ€์ง€ ์–ธ์–ด๋งŒ ์•„๋Š” ๊ฒฝ์šฐ
    • ์•„์ง ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณด์ง€ ๋ชปํ•œ ์‚ฌ๋žŒ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Œ
    • ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์Œ

ํ‰์†Œ์—๋„ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒฝํ—˜์ด ์ข‹์Œ.

ํ–‰๋™ ๋ฌธ์ œ (Behavioral Preparation)

๊ธฐ์ˆ  ์งˆ๋ฌธ๊ณผ ๋Œ€์‘๋˜๋Š” 'ํ–‰๋™ ์งˆ๋ฌธ(behavioral questions)' ์—๋„ ๋Œ€๋น„ํ•ด์•ผ ํ•จ.
๊ฒฝํ—˜ ๊ด€๋ จ ์งˆ๋ฌธ์ด๋ผ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ.
๋ณดํ†ต,

  • ์ธ์„ฑ์„ ์•Œ๊ธฐ ์œ„ํ•ด
  • ์ด๋ ฅ์„œ์— ์ ํžŒ ๋‚ด์šฉ์„ ์ข€ ๋” ๊นŠ์ด ์•Œ๊ธฐ ์œ„ํ•ด
  • ๊ธด์žฅ์„ ํ’€์–ด์ฃผ๊ธฐ ์œ„ํ•ด

ํ•œ๋‹ค.

[ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜]

์„ธ ๊ฐœ ์ •๋„์˜ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ์ž์„ธํžˆ ๋งํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๊ธฐ์ˆ ์ ์ธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ๊นŠ์ด ์žˆ๊ฒŒ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ด๋ ฅ์„œ์— ์ž‘์„ฑํ•œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ์•„๋ž˜์˜ ํ…Œ์ด๋ธ”์„ ์ž‘์„ฑํ•ด๋ณธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉด์ ‘ ์ „์— ์ด ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ๊ณต๋ถ€ํ•œ๋‹ค.

ํ”ํžˆ ๋‚˜์˜ค๋Š” ๋ฌธ์ œํ”„๋กœ์ ํŠธ 1ํ”„๋กœ์ ํŠธ 2ํ”„๋กœ์ ํŠธ 3
๊ฐ€์žฅ ๋„์ „์ ์ด์—ˆ๋˜ ๊ฒƒ
์‹ค์ˆ˜ ํ˜น์€ ์‹คํŒจ๋‹ด
์ฆ๊ฑฐ์› ๋˜ ๊ฒƒ
๋ฆฌ๋”์‹ญ
ํŒ€์›๊ณผ์˜ ๊ฐˆ๋“ฑ
๋‚จ๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ–‰๋™ํ–ˆ๋˜ ๊ฒƒ

[๋‹จ์ ]
๋‹จ์ ์„ ์–˜๊ธฐํ•  ๋•Œ๋Š” '์ง„์งœ ๋‹จ์ '์„ ์–˜๊ธฐํ•˜๋ผ. ์™„๋ฒฝ์ฃผ์˜ ๊ฐ™์€ ๋Œ€๋‹ต์€ ์˜ค๋งŒํ•˜๊ฑฐ๋‚˜ ์‹ค์ˆ˜๋ฅผ ์ธ์ •ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ์ด๋ผ๋Š” ์ธ์ƒ์„ ์ค„ ์ˆ˜ ์žˆ์Œ

[๋ฉด์ ‘๊ด€์—๊ฒŒ ํ•  ์งˆ๋ฌธ]
๋ฉด์ ‘๊ด€์—๊ฒŒ ํ•  ์–‘์งˆ์˜ ์งˆ๋ฌธ์„ ์ค€๋น„ํ•ด์•ผ ํ•จ. ์˜์‹/๋ฌด์˜์‹ ์ ์œผ๋กœ ๋ฉด์ ‘๊ด€์˜ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ์คŒ.

  • ์ˆœ์ˆ˜ํ•œ ์งˆ๋ฌธ
    • ํŒ€์—์„œ๋Š” ๊ณ„ํš์„ ์–ด๋–ค ์‹์œผ๋กœ ์ˆ˜๋ฆฝํ•˜๋‚˜์š”?
    • ์–ด๋–ป๊ฒŒ ์ด ํšŒ์‚ฌ์— ์˜ค์‹œ๊ฒŒ ๋˜์—ˆ๋‚˜์š”?
  • ํ†ต์ฐฐ๋ ฅ์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ
    • X๋ผ๋Š” ๊ธฐ์ˆ ์„ ์“ฐ์‹œ๋Š” ๊ฑธ ๋ดค๋Š”๋ฐ, OO๋ฌธ์ œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๊ณ  ๊ณ„์‹ ๊ฐ€์š”?
  • ์—ด์ •์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋Š” ์งˆ๋ฌธ
    • ใ…ใ… ์— ๊ด€ํ•ด์„œ ๊ด€์‹ฌ์ด ๋งŽ๊ณ  ๋งŽ์ด ๋ฐฐ์šฐ๊ณ  ์‹ถ์€๋ฐ, ๊ทธ๋Ÿฐ ๊ธฐํšŒ๊ฐ€ ์žˆ์„๊นŒ์š”?

[๋Œ€์ฒ˜ ์š”๋ น]

  1. ์˜ค๋งŒํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„ ๊นŠ์€ ์ธ์ƒ์„ ์‹ฌ์–ด์ฃผ๋ ค๋ฉด '๊ตฌ์ฒด์ ' ์œผ๋กœ ๋‹ต๋ณ€ํ•˜๋ฉด ๋œ๋‹ค.

    • ์‚ฌ์‹ค๋งŒ์„ ์ „๋‹ฌํ•˜๊ณ , ํ•ด์„์€ ๋ฉด์ ‘๊ด€์—๊ฒŒ ๋งก๊ธด๋‹ค.
    • ๊ตฌ์ฒด์ ์ด๋˜ ์„ธ๋ถ€์ ์ผ ํ•„์š”๋Š” ์—†๋‹ค.
    • ์ž์‹ ์ด ๋งก์•˜๋˜ ๋ถ€๋ถ„์„ ๋ญ‰๋šฑ๊ทธ๋ฆฌ์ง€ ๋ง๊ณ  ์–ด๋–ค ์‹คํ–‰์„ ํ–ˆ๋Š”์ง€ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๋˜, ์›๋ฆฌ๋ฅผ ์„ค๋ช…ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ๊ฒƒ.
  2. '์šฐ๋ฆฌ ํŒ€'์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ, '๋‚˜'์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

    • ๋ฉด์ ‘๊ด€์€ '๋‚˜'์˜ ์—ญํ• ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค.
  3. ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ต๋ณ€ํ•ด์•ผ ํ•œ๋‹ค.

    • ๋‘๊ด„์‹, ๊ทธ๋ฆฌ๊ณ  S.A.R (Situation. Action. Result)
    • ์ƒํ™ฉ(S: situation) ๋ณด๋‹ค ํ–‰๋™(A: action) ์„ ๋” ์ค‘์ ์ ์œผ๋กœ ์„ค๋ช…ํ•ด์•ผ ํ•จ.

[์ž๊ธฐ ์†Œ๊ฐœ]
ํ•œ๊ตญ ๊ธฐ์—… ๋ฉด์ ‘์—์„œ ํ•˜๋Š” '1๋ถ„ ์ž๊ธฐ์†Œ๊ฐœ' ์™€๋Š” ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋Šฌ์•™์Šค ๊ฐ™๊ธฐ๋Š” ํ•˜์ง€๋งŒ, tell me about yourself ๋ผ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜์„ ๋•Œ.
๋ณดํ†ต, ์‹œ๊ฐ„์ˆœ ๊ตฌ์กฐ๋กœ ์ด์•ผ๊ธฐ๋ฅผ ํ’€๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค.

ํ˜„์žฌ ์ง์—… (์„œ๋‘) - ํ•™๊ต - ์กธ์—… ํ›„ ์ง€๊ธˆ๊นŒ์ง€ - ํ˜„์žฌ ์—ญํ•  - ์—…๋ฌด ์™ธ(์ทจ๋ฏธ ํ˜น์€ ์ง๋ฌด ๊ด€๋ จ ํ™œ๋™) - ๋งˆ๋ฌด๋ฆฌ

์ทจ๋ฏธ๋Š” ์‚ฌ์‹ค ์ด์•ผ๊ธฐ ํ•˜์ง€ ์•Š์•„๋„ ๋ฌด๋ฐฉํ•˜์ง€๋งŒ, ์œ ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

  • ์ทจ๋ฏธ๊ฐ€ ๊ต‰์žฅํžˆ ๋…ํŠนํ•œ ๊ฒฝ์šฐ -> '๋‚˜๋Š” ๋ถˆ์„ ๋ฟœ์„ ์ˆ˜ ์žˆ์–ด์š”' : ํ˜ธ์˜์ ์ธ ๋ถ„์œ„๊ธฐ ํ˜•์„ฑ.
  • ์ทจ๋ฏธ์— ๊ธฐ์ˆ ์ ์ธ ๋ฉด์ด ์žˆ๋Š” ๊ฒฝ์šฐ -> ์ž๋ช….
  • ์ทจ๋ฏธ๊ฐ€ ๊ธ์ •์ ์ธ ์„ฑ๊ฒฉ์  ํŠน์„ฑ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒฝ์šฐ -> e.g. ์…€ํ”„ ๋ฆฌ๋ชจ๋ธ๋ง : ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ , ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ณ , ์†์„ ๋”๋Ÿฝํžˆ๋Š” ๊ฒƒ์„ ๋‘๋ ค์›Œํ•˜์ง€ ์•Š์Œ.

์–ด์จŒ๋“  ๊ฐ„์—, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚˜์˜ ์„ฑ๊ณต์‚ฌ๋ก€๋ฅผ ๋“œ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค.

big-O

[์‹œ๊ฐ„ ๋ณต์žก๋„]
์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ '์ ๊ทผ์  ์‹คํ–‰ ์‹œ๊ฐ„' (asymptotic runtime). (asymptotic: ์ ๊ทผ์„ ์˜)

O (big-O) - ์‹œ๊ฐ„์˜ ์ƒํ•œ. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์‹œ๊ฐ„์ด ์‹œ๊ฐ„๋ณด๋‹ค ๋‚ฎ๊ธฐ๋งŒ ํ•˜๋ฉด ํ‘œ๊ธฐ ๊ฐ€๋Šฅ.
ฮฉ (big-Omega) - ์‹œ๊ฐ„์˜ ๋“ฑ๊ฐ€ ํ˜น์€ ํ•˜ํ•œ. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹คํ–‰์‹œ๊ฐ„์ด ์‹œ๊ฐ„๋ณด๋‹ค ๋†’๊ธฐ๋งŒ ํ•˜๋ฉด ํ‘œ๊ธฐ ๊ฐ€๋Šฅ.
ฮ˜ (big-theta) - O(N) ์ด๋ฉด์„œ ฮฉ(N) ์ด๋ฉด, ฮ˜(N) ์ด๋‹ค.

์—…๊ณ„(๋ฉด์ ‘)์—์„œ big-O ๋Š” big-theta ์˜ ์˜๋ฏธ์™€ ๊ฐ€๊น๋‹ค. ์ฆ‰, ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๋”ฑ ๋งž๊ฒŒ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด big-O.

[์ตœ์„  / ์ตœ์•… / ํ‰๊ท ]
์ตœ์„ /์ตœ์•…/ํ‰๊ท ์˜ ๊ฒฝ์šฐ๋Š” ๊ทธ ์ž…๋ ฅ(์ƒํ™ฉ)์„ ์˜๋ฏธ. big-O, big-Omega, big-theta ์™€๋Š” ๋ฌด๊ด€.
๊ทธ ๊ฐ๊ฐ์˜ ์ž…๋ ฅ(์ƒํ™ฉ)์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ big-O ์‹œ๊ฐ„์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ.
๋ณดํ†ต์€ ํ‰๊ท ์˜ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜๋Š” ๋“ฏ.

e.g. ํ€ต์ •๋ ฌ
์ตœ์„ ์˜ ๊ฒฝ์šฐ - ๋ฐฐ์—ด์—์„œ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๋™์ผํ•  ๊ฒฝ์šฐ, ์ˆ˜ํ–‰ ์‹œ๊ฐ„์€ O(N). (๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ์ด๋Ÿด ์ˆ˜ ์žˆ๋Š” ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์กด์žฌ)
์ตœ์•…์˜ ๊ฒฝ์šฐ - ๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ํฐ ์›์†Œ๊ฐ€ ๊ณ„์†ํ•ด์„œ pivot์œผ๋กœ ์„ ์ •๋  ๊ฒฝ์šฐ (๋ฐฐ์—ด์ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์–ด ์žˆ๊ณ , ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ pivot์œผ๋กœ ํ•  ๊ฒฝ์šฐ), ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(N^2).
ํ‰๊ท ์˜ ๊ฒฝ์šฐ - O(N*logN)

[๊ณต๊ฐ„ ๋ณต์žก๋„]
๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์–ผ๋งˆ๋‚˜ ์ฐจ์ง€ํ•˜๋Š๋ƒ.
๊ธธ์ด๊ฐ€ n๊ฐœ์ธ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” O(n)์˜ ๊ณต๊ฐ„์ด ํ•„์š”.
์žฌ๊ท€ ํ˜ธ์ถœ์„ n๋ฒˆ ํ•˜๋ฉด O(n) ๋งŒํผ ํ˜ธ์ถœ ์Šคํƒ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ.
๋‹จ์ˆœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ n๋ฒˆ ํ•˜๋ฉด ๋‹จ์ง€ O(1) ๋งŒํผ์˜ ํ˜ธ์ถœ ์Šคํƒ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ. (๊ฐ ํ˜ธ์ถœ์ด ํ˜ธ์ถœ ์Šคํƒ์— ๋™์‹œ์— ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ)

[์ตœ๊ณ ์ฐจํ•ญ]
์ตœ๊ณ ์ฐจํ•ญ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ํ•ญ ๊ทธ๋ฆฌ๊ณ  ์ƒ์ˆ˜ํ•ญ์€ ๋ฌด์‹œํ•ด๋„ ๋œ๋‹ค.

[์ƒํ™˜ ์‹œ๊ฐ„]
์–ด๋–ค ์—ฐ์‚ฐ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ๋•Œ ํ‰๊ท ์ ์ธ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•.
์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ€๋” ๋ฐœ์ƒํ•˜์ง€๋งŒ, ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ํ›„๋กœ ๊ฝค ์˜ค๋žซ๋™์•ˆ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๋Š”๋‹ค.
๋”ฐ๋ผ์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•œ ๋น„์šฉ(์ˆ˜ํ–‰ ์‹œ๊ฐ„)์„ ๋‚˜๋จธ์ง€ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—์„œ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์—์„œ ๋ถ„ํ• ์ƒํ™˜ ํ•œ๋‹ค๋Š” ๊ฐœ๋….

ArrayList ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ๋ฐฐ์—ด์ด ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฉด ๊ธฐ์กด ๋ฐฐ์—ด ํฌ๊ธฐ์˜ 2๋ฐฐ์ธ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๊ธฐ์กด ์›์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌํ•œ๋‹ค.
๋งŒ์•ฝ N๊ฐœ์˜ ์›์†Œ๊ฐ€ ๊ฝ‰ ์ฐจ์žˆ๋Š” ๋ฐฐ์—ด์— ์›์†Œ ํ•˜๋‚˜๋ฅผ ์‚ฝ์ž…ํ•˜๋ ค๋ฉด O(N) ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
ํ•˜์ง€๋งŒ ๊ฝ‰ ์ฐจ ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” ์–ธ์ œ๋‚˜ O(1) ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 1,2,4,8,16,...,X ๋กœ ์ฆ๊ฐ€ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ๊ฐ ์ฆ๊ฐ€์‹œ์— ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋Š” 1,2,4,8,16,...,X ์ด๋‹ค.
์ด ๊ฐœ์ˆ˜๋“ค์˜ ํ•ฉ์€ X+X/2+X/4+X/8+...+1 ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ๋Œ€๋žต 2X ๊ฐ€ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ X๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ–ˆ์„ ๋•Œ ํ•„์š”ํ•œ ์‹œ๊ฐ„์€ O(2X) ์ด๊ณ , ์ด๋ฅผ X๋ฒˆ์˜ ์‚ฝ์ž…์— ๋Œ€ํ•ด ๋ถ„ํ™œ ์ƒํ™˜ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์‚ฝ์ž… ํ•œ ๋ฒˆ์— ํ•„์š”ํ•œ ์‹œ๊ฐ„์€ O(2X/X) ์ฆ‰ O(1)์ด๋‹ค.

[log N ์ˆ˜ํ–‰ ์‹œ๊ฐ„]
์–ด๋–ค ๋ฌธ์ œ์—์„œ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ˆ๋ฐ˜์”ฉ ์ค„์–ด๋“ ๋‹ค๋ฉด, ๊ทธ ๋ฌธ์ œ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(logN)์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค. (N๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง„ ๊ท ํ˜•์ด์ง„ํƒ์ƒ‰ํŠธ๋ฆฌ์˜ ๋†’์ด๋Š” logN)
๋กœ๊ทธ์˜ ๋ฐ‘์€ ์ƒ๊ด€์—†๋‹ค. ๋กœ๊ทธ์˜ ๋ฐ‘์— ๋”ฐ๋ฅธ ์ฐจ์ด๋Š” ์ƒ์ˆ˜ํ•ญ ๋งŒํผ์˜ ์ฐจ์ด์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

[์žฌ๊ท€์ ์ธ ์ˆ˜ํ–‰ ์‹œ๊ฐ„]
๋‹ค์ˆ˜์˜ ํ˜ธ์ถœ๋กœ ์ด๋ฃจ์–ด์ง„ ์žฌ๊ท€ ํ•จ์ˆ˜์—์„œ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ๋ณดํ†ต O(๋ถ„๊ธฐ^๊นŠ์ด) ๋กœ ํ‘œํ˜„๋˜๊ณค ํ•จ. (๋“ฑ๋น„ ์ˆ˜์—ด์˜ ํ•ฉ์— big-O ์ ์šฉ)
๋ถ„๊ธฐ(branch) : ์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์„ ์žฌํ˜ธ์ถœ ํ•˜๋Š” ํšŸ์ˆ˜
๊นŠ์ด : ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ ์กฐ๊ฑด๊ณผ ๊ด€๋ จ (if n<=1 ์—์„œ ์ข…๋ฃŒํ•˜๋ฉด ๊นŠ์ด๋Š” n์ด ๋˜๋Š” ๊ฒƒ)

[์˜ˆ์ œ ๋ฐ ์—ฐ์Šต๋ฌธ์ œ]
์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ

for (int i = 0; i < n; i++) {
	for (int j = i+1; j < n; j++) {
    	System.out.println(i + "," + j);
    }
}
  • ๋ฐ˜๋ณต ํšŒ์ˆ˜๋ฅผ ์„ธ์–ด๋ณด๊ธฐ :
    ์•ˆ์ชฝ ๋ฐ˜๋ณต๋ฌธ์ด n-1๋ฒˆ, n-2๋ฒˆ, n-3๋ฒˆ, ... , 1๋ฒˆ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋‹ค ๋”ํ•˜๋ฉด ๋จ.
    1๋ถ€ํ„ฐ x๊นŒ์ง€์˜ ํ•ฉ์€ x(x+1)/2 ์ด๋ฏ€๋กœ (n-1)n/2 ๋ฒˆ, ์ฆ‰ O(n^2) ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ฐ€์ง.

  • ํ‰๊ท ์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ• :
    ์•ˆ์ชฝ ๋ฐ˜๋ณต๋ฌธ์ด n-? ๋ฒˆ ๋ฐ˜๋ณต๋  ๊ฒƒ.
    ๋ฐ”๊นฅ์ชฝ ๋ฐ˜๋ณต๋ฌธ์ด n ๋ฒˆ , ๊ทธ ๋•Œ๋งˆ๋‹ค ์•ˆ์ชฝ ๋ฐ˜๋ณต๋ฌธ์ด n-? ๋ฒˆ ๋ฐ˜๋ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— n(n-?) ๋ฒˆ, ์ฆ‰ O(n^2) ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์„ ๊ฐ€์ง.

์žฌ๊ท€ ํ˜ธ์ถœ

// ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ๊ฐ’์„ ๋”ํ•˜๋Š” ์ฝ”๋“œ
int sum(Node node) {
	if (node == null) {
    	return 0;
    }
    return sum(node.left) + node.value + sum(node.right);
}

์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ, ์ˆ˜ํ–‰์‹œ๊ฐ„์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํšŸ์ˆ˜ ์ฆ‰, ํ˜ธ์ถœ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ ๊ฐœ์ˆ˜์™€ ๋น„๋ก€ํ•œ๋‹ค.
์ด ๊ฒฝ์šฐ, ์ž…๋ ฅ ์ž์ฒด๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์ด๋ฏ€๋กœ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ n์ด๋ฉด ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(n)์ด๋‹ค.
์œ„์—์„œ ์–ธ๊ธ‰๋œ O(๋ถ„๊ธฐ^๊นŠ์ด)๋กœ ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋ฉด ๋ถ„๊ธฐ๋Š” 2, ๊นŠ์ด๋Š” logn ์ด ๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒฐ๊ตญ O(2^logn)=O(n)์ด ๋œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒฐ๊ณผ๋ฌผ์˜ ๊ฐœ์ˆ˜์™€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ํšŸ์ˆ˜๋ฅผ ํ˜ผ๋™ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๊ธธ์ด๊ฐ€ n์ธ ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์ˆœ์—ด์„ ์ „๋ถ€ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์žฌ๊ท€ ํ˜ธ์ถœ๋กœ ๋™์ž‘ํ•œ๋‹ค.
๊ฐ€๋Šฅํ•œ ์ˆœ์—ด์˜ ๊ฐœ์ˆ˜๋Š” ์ด n! ์ž„์„ ์ตํžˆ ์•Œ๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ํ˜ธ์ถœ ํšŸ์ˆ˜(์ˆ˜ํ–‰์‹œ๊ฐ„)์ด n! ์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
ํ˜ธ์ถœ ํŠธ๋ฆฌ์—์„œ ๋ฆฌํ”„ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ n!์ด ๋  ๊ฒƒ์ด๊ณ , ๋ฃจํŠธ์—์„œ ๊ฐ ๋ฆฌํ”„ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๊ฐ€ n์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ „์ฒด ๋…ธ๋“œ(ํ•จ์ˆ˜ ํ˜ธ์ถœ)์˜ ๊ฐœ์ˆ˜๋Š” n*n! ๊ฐœ๋ฅผ ๋„˜์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.
์ฆ‰, ์ด ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(n*n!)์„ ๋„˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค.

๊ธฐ์ˆ ์  ์งˆ๋ฌธ (Technical Questions)

[์ค€๋น„ํ•˜๊ธฐ]

  1. ์ง์ ‘ ํ’€๋„๋ก ๋…ธ๋ ฅํ•  ๊ฒƒ.
  2. ์ฝ”๋“œ๋ฅผ ์ข…์ด์— ์ž‘์„ฑํ•ด ๋ณผ ๊ฒƒ.
  3. ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธ ํ•  ๊ฒƒ.
  4. ์ข…์ด์— ์ ์€ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ์ปดํ“จํ„ฐ๋กœ ์˜ฎ๊ฒจ์„œ ์‹คํ–‰ํ•ด ๋ณผ ๊ฒƒ.
  5. ๊ฐ€์ƒ ๋ฉด์ ‘์„ ๊ฐ€๋Šฅํ•œ ๋งŽ์ด ํ•ด๋ณผ ๊ฒƒ.

[ํ•„์ˆ˜ ๊ธฐ๋ณธ๊ธฐ]
์ž๋ฃŒ๊ตฌ์กฐ / ์•Œ๊ณ ๋ฆฌ์ฆ˜

  1. ์ž๋ฃŒ๊ตฌ์กฐ
    • ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ (Linked Lists)
    • ํŠธ๋ฆฌ, ํŠธ๋ผ์ด (Tries), ๊ทธ๋ž˜ํ”„
    • ์Šคํƒ & ํ
    • ํž™
    • Vector / ArrayList
    • ํ•ด์‹œํ…Œ์ด๋ธ”
  2. ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • BFS
    • DFS
    • ์ด์ง„ ํƒ์ƒ‰
    • ๋ณ‘ํ•ฉ ์ •๋ ฌ
    • ํ€ต ์ •๋ ฌ
  3. ๊ฐœ๋…
    • ๋น„ํŠธ ์กฐ์ž‘ (Bit Manipulation)
    • ๋ฉ”๋ชจ๋ฆฌ (์Šคํƒ vs ํž™)
    • ์žฌ๊ท€
    • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming)
    • big-O ์‹œ๊ฐ„ & ๊ณต๊ฐ„

์‚ฌ์šฉ๋ฒ•, ๊ตฌํ˜„๋ฒ•, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐ„ & ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋‘์–ด์•ผ.
์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ๋ฅผ ์ถ”์ฒœ (์ข…์ด -> ์ปดํ“จํ„ฐ)

[์‹ค์ œ ๋ฌธ์ œ ์‚ดํŽด๋ณด๊ธฐ]

  1. ๊ฒฝ์ฒญํ•˜๊ธฐ
    ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ. e.g. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ...
  2. ์˜ˆ์ œ๋ฅผ ์ง์ ‘ ๊ทธ๋ ค๋ณด๊ธฐ
    ๋ฌธ์ œ์— ๋งž๋Š” ์‹ค์ œ ์ˆซ์ž์™€ ๋ฌธ์ž์—ด์„ ์ด์šฉํ•ด์„œ, ์ถฉ๋ถ„ํžˆ ํฐ ์˜ˆ์ œ๋ฅผ ์ง์ ‘ ๊ทธ๋ ค๋ณด์ž. ํŠน๋ณ„ํ•œ ์˜ˆ์ œ๋ฅผ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค.
  3. brute force๋กœ ์ผ๋‹จ ํ•ด๋ณด๊ธฐ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™” ์‹œ์ž‘์ ์ด ๋ฐ”๋กœ brute force ์ ‘๊ทผ๋ฒ•. ์ด ๊ณผ์ •์ด ๋ฌธ์ œ์— ์ง‘์ค‘ํ•˜๋„๋ก ๋„์›€์„ ์ค€๋‹ค.
  4. ์ตœ์ ํ™”
    brute force๋กœ ๋งŒ๋“  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ตœ์ ํ™” ํ•œ๋‹ค.
    • ๊ฐ„๊ณผํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š”๊ฐ€? (e.g. ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด)
    • ์ƒˆ๋กœ์šด ์˜ˆ์ œ
    • ์ž˜๋ชป๋œ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ธฐ. ๊ทธ๋กœ ๋ถ€ํ„ฐ ๊ฐœ์„ ํ•˜๊ธฐ
    • ์‹œ๊ฐ„ / ๊ณต๊ฐ„์˜ ์‹ค์ต์„ ๋”ฐ์ ธ์„œ ๊ท ํ˜• ๋งž์ถ”๊ธฐ.
    • ์ •๋ณด๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•ด ๋‘๊ธฐ
    • ํ•ด์‹œํ…Œ์ด๋ธ” ์ ๊ทน ํ™œ์šฉํ•˜๊ธฐ
  5. ๊ฒ€ํ† ํ•˜๊ธฐ
  6. ์ฝ”๋“œ ์ž‘์„ฑํ•˜๊ธฐ
    • ๋ชจ๋“ˆํ™”๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. ํ–‰๋ ฌ์„ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, ๊ทธ๋Ÿฐ ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋„ ์ข‹๋‹ค.
    • ์—๋Ÿฌ ๊ฒ€์ฆํ•˜๋ผ. todo๋กœ ๋Œ€์‹ ํ•˜๊ณ  ์„ค๋ช…์„ ํ•ด๋„ ์ข‹๋‹ค.
    • ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ผ. ๊ทธ๋Ÿฐ ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ์ฝ”๋”ฉ.
    • ์ข‹์€ ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•˜๋ผ. ๋ฐ˜๋ณต๋ฌธ์˜ i,j ๋ง๊ณ ๋Š” ํ•œ ๊ธ€์ž๋ฅผ ์“ฐ์ง€ ๋ง์ž. ๋ณ€์ˆ˜๋ช…์„ ์ค„์—ฌ ์“ฐ๋”๋ผ๋„ ์ฒ˜์Œ์—๋Š” ํ’€๋„ค์ž„์œผ๋กœ ์“ฐ๊ณ  ๋‚˜์ค‘์— ์ค„์ผ ๋•Œ ์„ค๋ช…ํ•˜์ž.
  7. ํ…Œ์ŠคํŠธ
    ์ด์ „์— ๋งŒ๋“  ์˜ˆ์ œ, ํฌ๊ธฐ๊ฐ€ ํฐ ์˜ˆ์ œ๋Š” ํ”ผํ•˜์ž
    • ์™„์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ฝ์–ด๋ณด๋ฉฐ ๋จธ๋ฆฟ์†์œผ๋กœ ํ…Œ์ŠคํŠธ ํ•ด๋ณธ๋‹ค.

[์ตœ์ ํ™” ๋ฐ ๋ฌธ์ œํ’€์ด ๊ธฐ์ˆ ]
#1. BUD๋ฅผ ์ฐพ์œผ๋ผ
BUD๋Š” ๋‹ค์Œ์˜ ์•ฝ์ž์ด๋‹ค.

๋ณ‘๋ชฉ ํ˜„์ƒ (Bottlenecks)
๋ถˆํ•„์š”ํ•œ ์ž‘์—… (Unnecessary Work)
์ค‘๋ณต๋˜๋Š” ์ž‘์—… (Duplicated Work)

๋ณ‘๋ชฉํ˜„์ƒ : ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์ „์ฒด ์ˆ˜ํ–‰ ์‹œ๊ฐ„์„ ์žก์•„๋จน๋Š” ๋ถ€๋ถ„.

์˜ˆ์ œ: ์„œ๋กœ ๋‹ค๋ฅธ ์ •์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐฐ์—ด์ด ์žˆ์„ ๋•Œ ๋‘ ์ •์ˆ˜์˜ ์ฐจ์ด๊ฐ€ k์ธ ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ธ๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์ด {1, 7, 5, 9, 2, 12, 3}์ด๊ณ  k=2๋ฉด, ๋‘ ์ •์ˆ˜์˜ ์ฐจ์ด๊ฐ€ 2์ธ ์Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋„ค ๊ฐœ๊ฐ€ ์กด์žฌํ•œ๋‹ค. (1,3), (3,5), (5,7), (7,9)

์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

brute force -> ๊ฐ€๋Šฅํ•œ ์Œ์„ ์ „๋ถ€ ๋งŒ๋“ค๊ณ , ๊ฐ ์Œ ๋‚ด๋ถ€์˜ ์ฐจ์ด๋ฅผ ๋ชจ๋‘ ๊ตฌํ•œ ๋’ค ๊ทธ ๊ฐ’์ด ์ •ํ™•ํžˆ k๊ฐ€ ๋˜๋Š” ์Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค.
-๋ณ‘๋ชฉ์ง€์  -> ๊ฐ€๋Šฅํ•œ ์Œ์„ ์ „๋ถ€ ๋งŒ๋“œ๋Š” ๊ฒƒ. ์ฆ‰, ๊ฐ ์Œ์˜ ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ฐพ๋Š” ๊ฒƒ.
๊ฐœ์„ ์•ˆ -> ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋ฉด, ๊ฐ ์Œ์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์— ๋Œ€ํ•ด k๋งŒํผ ์•ž ๋’ค๋กœ ์ฐจ์ด๋‚˜๋Š” ์ •์ˆ˜๋ฅผ ์ด์ง„ ํƒ์ƒ‰์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.
-์‹  ๋ณ‘๋ชฉ์ง€์  -> ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด์•ผ ํ•œ๋‹ค(nlogn). ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ถ€๋ถ„ (์ง€๊ธˆ์€ ์ด์ง„ ํƒ์ƒ‰) ์„ ์•„๋ฌด๋ฆฌ ๊ฐœ์„ ํ•ด๋„ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„์€ ๊ทธ๋Œ€๋กœ.
์‹  ๊ฐœ์„ ์•ˆ -> ๋ชจ๋“  ์›์†Œ๋ฅผ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋„ฃ์œผ๋ฉด(n) ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋„ ํ•ด์‹œํ…Œ์ด๋ธ”๋กœ ์ƒ์ˆ˜์‹œ๊ฐ„์— ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ ์ž‘์—…

์˜ˆ์ œ: a,b,c,d๊ฐ€ 1์—์„œ 1000 ์‚ฌ์ด์— ์žˆ๋Š” ์ •์ˆ˜ ๊ฐ’ ์ค‘ ํ•˜๋‚˜์ผ ๋•Œ a^3 + b^3 = c^3 + d^3 ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ์ž์—ฐ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜์‹œ์˜ค.

์•„๋ž˜์™€ ๊ฐ™์€ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

brute-force -> O(n^4)

n = 1000
for a from 1 to n
	for b from 1 to n
    	for c from 1 to n
        	for d from 1 to n
            	if a^3 + b^3 == c^3 + d^3
                	print a, b, c, d

-๋ถˆํ•„์š”ํ•œ ์ž‘์—… -> d๊ฐ’์ด ์ •ํ•ด์กŒ์œผ๋ฉด, ๋‚˜๋จธ์ง€ d์˜ ํ›„๋ณด๋“ค์€ ํ™•์ธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

n = 1000
for a from 1 to n
	for b from 1 to n
    	for c from 1 to n
        	for d from 1 to n
            	if a^3 + b^3 == c^3 + d^3
                	print a, b, c, d
                    break // ๋ฃจํ”„์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

-๋ถˆํ•„์š”ํ•œ ์ž‘์—… -> a,b,c ๊ฐ’์ด ์ •ํ•ด์ง„ ์ƒํ™ฉ์—์„œ ์œ ํšจํ•œ d์˜ ๊ฐ’์€ ์ˆ˜์‹์œผ๋กœ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. -> O(n^3)

n = 1000
for a from 1 to n
	for b from 1 to n
    	for c from 1 to n
        	d = pow(a^3 + b^3 - c^3 , 1/3) // ์ •์ˆ˜๋กœ ๋ฐ˜์˜ฌ๋ฆผ ๋จ
            if a^3 + b^3 == c^3 + d^3
            	print a, b, c, d

์ค‘๋ณต๋˜๋Š” ์ž‘์—…
์œ„์™€ ๊ฐ™์€ ์˜ˆ์ œ.

-์ค‘๋ณต๋˜๋Š” ์ž‘์—… -> (a,b)์— ๋Œ€ํ•˜์—ฌ ์ด๋ฅผ ๋งŒ์กฑํ•˜๋Š” (c,d)๋ฅผ ๋งค๋ฒˆ ๊ตฌํ•ด์•ผ ํ•จ.
(c,d) = c^3 + d^3 ๊ฐ€ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” '๊ฐ’'๋“ค์€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฏ€๋กœ, ๋งค๋ฒˆ ๊ตฌํ•˜์ง€ ๋ง๊ณ  ๋ฏธ๋ฆฌ ๋‹ค ๊ณ„์‚ฐ์„ ํ•ด๋‘์–ด ํ•„์š”ํ•  ๋•Œ ์ฐพ์•„ ์“ด๋‹ค.
์ฆ‰, ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์ด์šฉํ•ด ๊ฐ€๋Šฅํ•œ '๊ฐ’'๋“ค์„ key๋กœ ํ•˜๊ณ  ๊ทธ '๊ฐ’'์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” (c,d)์˜ ์Œ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ value๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

n = 1000
for c from 1 to n
	for d from 1 to n
    	result = c^3 + d^3
        map[result] ์— (c,d) ์ถ”๊ฐ€.
for a from 1 to n
	for b from 1 to n
    	key = a^3 + b^3
        list = map.get(key)
        for pair in list
        	print a, b, pair

์‚ฌ์‹ค (a,b) ์Œ ๋˜ํ•œ ๊ฐ™์€ ์กฐ๊ฑด(๊ฐ๊ฐ์˜ ์„ธ์ œ๊ณฑ์˜ ํ•ฉ)์ด๊ธฐ ๋•Œ๋ฌธ์— (c,d)์˜ ๊ณ„์‚ฐ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

n = 1000
for c from 1 to n
	for d from 1 to n
    	result = c^3 + d^3
        map[result] ์— (c,d) ์ถ”๊ฐ€.

for result, list in map
	for pair_1 in list
    	for pair_2 in list
        	print pair_1, pair_2

๊ฒฐ๊ตญ O(n^2) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

#2. ๋ฌธ์ œ์˜ ๋‹ต์„ ์†์œผ๋กœ ์ง์ ‘ ๊ตฌํ•ด๋ณด๋ผ
์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ง๊ด€์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ: ๊ธธ์ด๊ฐ€ ์ž‘์€ ๋ฌธ์ž์—ด s์™€ ๊ธธ์ด๊ฐ€ ๊ธด ๋ฌธ์ž์—ด b๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฌธ์ž์—ด b์•ˆ์— ์กด์žฌํ•˜๋Š” ๋ฌธ์ž์—ด s์˜ ๋ชจ๋“  ์ˆœ์—ด์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ผ. ๊ฐ ์ˆœ์—ด์˜ ์œ„์น˜๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•ด์•ผ ๊ฒ ๋‹ค๊ณ  ์ ‘๊ทผํ•˜๋‹ค๋ณด๋ฉด,
๋ฌธ์ž์—ด s์˜ ๋ชจ๋“  ์ˆœ์—ด -> O(s!)
๊ฐ ์ˆœ์—ด์„ ๋ฌธ์ž์—ด b ์•ˆ์—์„œ ์ฐพ๋Š”๋‹ค -> O(b)
๊ฒฐ๊ตญ -> O(s!*b)

์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์ง๊ด€์ ์œผ๋กœ ๋‹ต์„ ๋‚ด๋ ค๊ณ  ์ ‘๊ทผํ•ด๋ณด๋ฉด,

s: abbc
b: cbabadcbbabbcbabaabccbabc

b๋ฅผ ์•ž์—์„œ๋ถ€ํ„ฐ 4๊ธ€์ž์”ฉ ๋Š์–ด์„œ ์ฐจ๋ก€๋กœ ์‚ดํŽด๋ณธ๋‹ค. ๊ฐ ๊ธ€์ž๋ฅผ s์—์„œ ํ•˜๋‚˜์”ฉ ๋ฝ‘์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ˆœ์—ด์„ ์ฐพ์€ ๊ฒƒ์ด๋‹ค. -> O(b*s^2)

๋ฌธ์ œ์— ์ ํ•ฉํ•˜๊ณ  ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉฐ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง๊ด€์ ์œผ๋กœ, ์†์œผ๋กœ, ๋จธ๋ฆฌ๋กœ ๋ฌธ์ œ์˜ ๋‹ต์„ ์ง์ ‘ ๋‚ด๋ณธ๋‹ค.
๊ทธ ์ง๊ด€์ ์ธ ํ’€์ด๊ณผ์ •์„ ์—ญ์œผ๋กœ ์ด์šฉํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„. ๋‚˜๋„ ๋ชจ๋ฅด๊ฒŒ ์ง๊ด€์œผ๋กœ ํ–‰ํ–ˆ๋˜ '์ตœ์ ํ™”'๋ฅผ ์•Œ์•„๋‚ธ๋‹ค.

#3. ๋‹จ์ˆœํ™”, ์ผ๋ฐ˜ํ™”ํ•˜๋ผ
๋ฌธ์ œ์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ๋‹จ์ˆœํ™”ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ˜•์‹œํ‚จ ํ˜•ํƒœ๋กœ ํ•ด๊ฒฐํ•œ ํ›„์—, ๋ณต์žกํ•œ ํ˜•ํƒœ๋กœ ๋‹ค๋“ฌ์–ด ๊ฐ„๋‹ค.

์˜ˆ์ œ: ๋žœ์„ฌ ๋…ธํŠธ(ransom note)๋Š” ์žก์ง€์—์„œ ์˜ค๋ฆฐ ๋‹จ์–ด๋ฅผ ์ด์šฉํ•ด์„œ ๋งŒ๋“ค์–ด ๋‚ธ ์ƒˆ๋กœ์šด ๋ฌธ์žฅ์„ ์˜๋ฏธํ•œ๋‹ค. ์žก์ง€(๋ฌธ์ž์—ด)๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์žก์ง€์—์„œ ๋ฌธ์ž์—ด๋กœ ํ‘œํ˜„ ํŠน์ • ๋žœ์„ฌ ๋…ธํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ• ๊นŒ?

'์˜ค๋ฆฐ ๋‹จ์–ด'๋ฅผ '์˜ค๋ฆฐ ๊ธ€์ž'๋กœ ๋‹จ์ˆœํ™” ํ•ด๋ณธ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•ด ํŠน์ • ๋žœ์„ฌ ๋…ธํŠธ์— ๋‚˜ํƒ€๋‚œ ๊ธ€์ž๋“ค์˜ ๊ฐ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ์žก์ง€์˜ ๊ธ€์ž๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ด ๊ฐœ์ˆ˜๋“ค์„ ๋‹ค ์†Œ์ง„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
๊ฒฐ๊ตญ ๋‹จ์–ด๋กœ ์ผ๋ฐ˜ํ™” ํ•˜๋ฉด, ํ•ด์‹œํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด ๊ฐ ๋‹จ์–ด์˜ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ์žก์ง€์˜ ๋‹จ์–ด๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ด ๊ฐœ์ˆ˜๋“ค์„ ๋‹ค ์†Œ์ง„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

#4. base case๋กœ๋ถ€ํ„ฐ ํ™•์žฅํ•˜๊ธฐ
n=1 ๊ณผ ๊ฐ™์€ base case์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ , ๊ฑฐ๊ธฐ์„œ ํ•ด๋ฒ•์„ ํ™•์žฅํ•ด ๋‚˜๊ฐ„๋‹ค.

์˜ˆ์ œ: ๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ์ˆœ์—ด์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ผ. ๋ชจ๋“  ๋ฌธ์ž๋Š” ๋ฌธ์ž์—ด ๋‚ด์—์„œ ๊ณ ์œ ํ•˜๊ฒŒ ๋“ฑ์žฅํ•œ๋‹ค.

์ž…๋ ฅ ๋ฌธ์ž์—ด๋กœ abcdefg ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค๊ณ  ํ•˜๋ฉด,

case "a" -> {"a"}
case "ab" -> {"ab", "ba"}
case "abc" -> ?

P("abc") ๋Š” P("ab")์—์„œ "c"๋ฅผ ์‚ฌ์ด์‚ฌ์ด์— ๋ผ์›Œ๋„ฃ์œผ๋ฉด ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
์ด๋ ‡๋“ฏ base case๋กœ ๋ถ€ํ„ฐ์˜ ํ™•์žฅ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

#5. ์ž๋ฃŒ๊ตฌ์กฐ ํ•˜๋‚˜์”ฉ ๋Œ€์ž…ํ•ด๋ณด๊ธฐ
๋‹จ์ˆœํ•˜๊ฒŒ ์ผ๋ จ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ฐจ๋ก€์ฐจ๋ก€ ์‚ดํŽด๋ณด๋ฉด์„œ ํ•˜๋‚˜์”ฉ ์ ์šฉํ•ด ๋ณด๊ธฐ. ๋„ˆ์ €๋ถ„ํ•˜์ง€๋งŒ ์€๊ทผ ์ž์ฃผ ํ†ตํ•œ๋‹ค.

์˜ˆ์ œ: ์ž„์˜์˜ ์ˆซ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋‚ธ ๋’ค ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด์— ์ฐจ๋ก€๋กœ ์ €์žฅํ•œ๋‹ค. ์ƒˆ๋กœ์šด ์ž…๋ ฅ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ค‘๊ฐ„๊ฐ’(median)์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๋Š”๊ฐ€?

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

[๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„]
BCR : Best Conceivable(์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”) Runtime

  • ์–ด๋–ค ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ, ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ํ•ด๋ฒ• ์ค‘์— ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋น ๋ฅธ ๊ฒƒ.

  • ์ฃผ์–ด์ง„ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ์ด ๋ณด๋‹ค๋Š” ๋น ๋ฅผ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ.
    e.g. ๊ฐ๊ฐ ๊ธธ์ด๊ฐ€ A, B ์ธ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ๋‘ ๋ฐฐ์—ด์— ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด์žˆ๋Š” ์›์†Œ๋ฅผ ์„ธ๋Š” ๊ฒฝ์šฐ ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(A+B) ๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์—†์„ ๊ฒƒ.

  • Best Conceivable Runtime: ๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    -> ๋ชจ๋“  ํ•ด๋ฒ• ์ค‘ ๊ฐ€์šด๋ฐ ๊ฐ€์žฅ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    Best Case Runtime: '์ตœ์„ ์˜ ๊ฒฝ์šฐ'์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    -> ํŠน์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š” '๊ฒฝ์šฐ'(case)์˜ ์ˆ˜ํ–‰ ์‹œ๊ฐ„
    ๋‘˜์€ ์ „ํ˜€ ๋ฌด๊ด€.

์‚ฌ์šฉ๋ฒ•์— ๊ด€ํ•œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

์˜ˆ์ œ: ์ •๋ ฌ๋œ ๋ฐฐ์—ด ๋‘ ๊ฐœ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ณตํ†ต์œผ๋กœ ๋“ค์–ด ์žˆ๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ฐพ์œผ๋ผ.

A: 13 27 35 40 49 55 59
B: 17 35 39 40 55 58 60
  • brute-force: O(N^2)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜: ?
  • BCR: O(N)
    - ์›์†Œ๋Š” ์ด 2N์ด๊ณ , ๋ชจ๋“  ์›์†Œ๋ฅผ ์ ์–ด๋„ ํ•œ ๋ฒˆ์”ฉ์€ ์‚ดํŽด๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ.

๊ฒฐ๊ตญ O(N)๊นŒ์ง€ ์ค„์—ฌ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์•ผ๊ธฐ.
O(N*N) ์—์„œ ์ฒซ๋ฒˆ์งธ N์€ ๋”์ด์ƒ ์ค„์ผ ์ˆ˜ ์—†์„ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ(BCR ํ™œ์šฉ ์ง€์ ), ๋‘๋ฒˆ์งธ N์„ ์–ด๋–ป๊ฒŒ ์ค„์ผ๊นŒ?
๋‘๋ฒˆ์งธ N์€ ํƒ์ƒ‰ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋‚˜์˜จ ๊ฒƒ์ด๋ฏ€๋กœ, ์ด๋ฅผ ์ด์ง„ ํƒ์ƒ‰์„ ํ†ตํ•ด logN์œผ๋กœ ์ตœ์ ํ™” ํ•ด๋ณผ ์ˆ˜ ์žˆ์Œ.

  • brute-force: O(N^2)
  • ๊ฐœ์„ ์•ˆ: O(N logN)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜: ?
  • BCR: O(N)

๋” ๊ฐœ์„ ํ•  ์ˆ˜๋Š” ์—†๋Š”๊ฐ€? ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค ํ•˜๋”๋ผ๋„ ํƒ์ƒ‰์„ O(logN)๋ณด๋‹ค ์ค„์ผ ์ˆ˜๋Š” ์—†๋‹ค.
ํ•˜์ง€๋งŒ BCR๋ณด๋‹ค ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๋น ๋ฅด๊ฑฐ๋‚˜ ๊ฐ™์€ ๋ชจ๋“  ์ž‘์—…์€ ์ „์ฒด ์ˆ˜ํ–‰์‹œ๊ฐ„์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค (BCR ํ™œ์šฉ ์ง€์ ).
๊ทธ๋ž˜์„œ O(N) ์•ˆ์— ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ „ ์ž‘์—…์€ ๋ฌด์—‡์ด๋“  ํ•ด๋‘์–ด๋„ ๋œ๋‹ค -> ์‚ฌ์ „์— ํ•ด์‹œํ…Œ์ด๋ธ”์„ O(N)์— ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ -> ํƒ์ƒ‰ ์ž์ฒด๋Š” O(1)์— ๊ฐ€๋Šฅ.
๊ทธ๋Ÿฌ๋ฉด ์ด ์ˆ˜ํ–‰์‹œ๊ฐ„์€ O(N)์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

  • brute-force: O(N^2)
  • ๊ฐœ์„ ์•ˆ: O(N logN)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์‹œ๊ฐ„ - O(N), ๊ณต๊ฐ„ - O(N)
  • BCR: O(N)

๋„์ถœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„์ด BCR์ด ๊ฐ™์•„์กŒ์œผ๋‹ˆ ๋” ์ด์ƒ '์ˆ˜ํ–‰์‹œ๊ฐ„' ์—์„œ์˜ ์ตœ์ ํ™”๋Š” ๋ (BCR ํ™œ์šฉ ์ง€์ ).
'๊ณต๊ฐ„ ๋ณต์žก๋„' ๋ฅผ ์ตœ์ ํ™” ํ•ด๋ณด์ž. O(N)๋ณด๋‹ค ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๋ ค๋ฉด ํ•ด์‹œํ…Œ์ด๋ธ”์„ ํฌ๊ธฐํ•ด์•ผ ํ•จ. -> ๋‹ค์‹œ ์ด์ง„ํƒ์ƒ‰์œผ๋กœ.

  • brute-force: O(N^2)
  • ๊ฐœ์„ ์•ˆ: O(N logN)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์‹œ๊ฐ„ - O(N logN), ๊ณต๊ฐ„ - O(1)
  • BCR: O(N)

์ด ์ƒํƒœ์—์„œ ๋‹ค์‹œ ํƒ์ƒ‰ ์‹œ๊ฐ„์„ ์ตœ์ ํ™” ํ•ด๋ณด์ž.
๋‘˜๋‹ค "์ •๋ ฌ๋œ ๋ฐฐ์—ด"์ด๋ผ๋Š” ํฐ ํžŒํŠธ๊ฐ€ ์žˆ๋‹ค.
A๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋ฐฉ๋ฌธํ•˜๋ฉฐ B๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์ฐจ๋ก€๋กœ ์‚ดํ”ผ๊ฒŒ ๋ ํ…๋ฐ,
A๋ฐฐ์—ด์˜ n๋ฒˆ์งธ ์›์†Œ๋ฅผ B๋ฐฐ์—ด์˜ ์–ด๋–ค ์œ„์น˜์—์„œ ์ฐพ์•˜๋‹ค๋ฉด A๋ฐฐ์—ด์˜ n+1๋ฒˆ์งธ ์›์†Œ๋Š” ๊ทธ ์œ„์น˜์˜ ๋’ค ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค. ์ „์ฒด์ ์œผ๋กœ๋Š” ๋‘ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์›์†Œ ๊ฐœ์ˆ˜์ธ 2n๊ฐœ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฉ๋ฌธํ•ด ๋ณด๋ฉด ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰ O(N)์— ํƒ์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค.

  • brute-force: O(N^2)
  • ๊ฐœ์„ ์•ˆ: O(N logN)
  • ์ตœ์  ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์‹œ๊ฐ„ - O(N), ๊ณต๊ฐ„ - O(1)
  • BCR: O(N)

์ˆ˜ํ–‰์‹œ๊ฐ„์ด BCR๊ณผ ๊ฐ™์•„์ง€๊ณ  ๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1) ์ด ๋˜์—ˆ๋‹ค๋ฉด, big-O ์‹œ๊ฐ„๊ณผ ๊ณต๊ฐ„์€ ๋” ์ด์ƒ ์ตœ์ ํ™” ํ•  ์ˆ˜ ์—†๋‹ค (BCR ํ™œ์šฉ ์ง€์ ).

[์˜ค๋‹ต์— ๋Œ€ํ•œ ๋Œ€์ฒ˜๋ฒ•]
๋‹ค ๋งž์ถœ ํ•„์š”๋Š” ์ „ํ˜€ ์—†๋‹ค. ๋งž์•˜๋ƒ ํ‹€๋ ธ๋ƒ๋กœ ํ‰๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.
ํ‰๊ฐ€ ๊ธฐ์ค€์€,

  • ์ตœ์  ํ•ด๋ฒ•์— ๊ทผ์ ‘ํ•œ๊ฐ€
  • ํ‘ธ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ ธ๋‚˜
  • ํžŒํŠธ๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ•„์š”ํ–ˆ๋ƒ
  • ์ฝ”๋“œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๊น”๋”ํ–ˆ๋ƒ

๊ทธ๋ฆฌ๊ณ  ์ƒ๋Œ€ํ‰๊ฐ€์ด๋‹ค. ์ €์ž๊ฐ€ ๊ตฌ๊ธ€์—์„œ ์ˆ˜์ฒœ ๋ช…์„ ์‹ฌ์‚ฌํ•˜๋ฉด์„œ ์•„๋ฌด '๊ฒฐ์ ' ์—†์ด ๋ฉด์ ‘์„ ๋งˆ์นœ ์‚ฌ๋žŒ์„ ๋”ฑ ํ•œ๋ช… ๋ดค๋‹ค.

[์•Œ๊ณ  ์žˆ๋˜ ๋ฌธ์ œ๊ฐ€ ๋ฉด์ ‘์— ๋‚˜์™”์„ ๋•Œ]
์ด์‹ค์ง๊ณ ํ•˜๋ผ. ์ด์œ ๋Š”,

  1. ์ด๋ฏธ ์•Œ๊ณ ์žˆ๋Š” ๋ฌธ์ œ๋กœ๋Š” ์ •ํ™•ํ•œ ํ‰๊ฐ€๊ฐ€ ์–ด๋ ต๋‹ค.
  2. ๋งŒ์•ฝ ๋“คํ‚จ๋‹ค๋ฉด ์•„์ฃผ ๋ถ€์ •์งํ•œ ์ธ์ƒ์„ ์ค€๋‹ค. (๋ฐํžŒ๋‹ค๋ฉด ๋ฐ˜๋Œ€๋กœ ์•„์ฃผ ์ •์งํ•œ ์ธ์ƒ์„ ์ค€๋‹ค)

[๋ฉด์ ‘์šฉ ์–ธ์–ด]

  • ๋‚ด๊ฐ€ ๊ฐ€์žฅ ํŽธํ•œ ์–ธ์–ด
  • ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด
  • ๊ฐ€๋…์„ฑ์ด ์ข‹์€ ์–ธ์–ด ( <-> Scala, Objectiv-C)
  • ์–ธ์–ด๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹ (C++: ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ํฌ์ธํ„ฐ ๊ด€๋ฆฌ๊ฐ€ ์ˆ˜๋™)
  • ์žฅํ™ฉํ•จ
    • ์ž๋ฐ”๋Š” ์žฅํ™ฉํ•˜๊ณ  ํŒŒ์ด์ฌ์€ ๊ฐ„๊ฒฐํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์ž„์˜๋กœ ์ถ•์•ฝํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
  • ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ
    • ํŒŒ์ด์ฌ์€ ํ•จ์ˆ˜์—์„œ ๊ฐ’ ๋‘๊ฐœ ๋ฐ˜ํ™˜ํ•˜๋Š”๊ฒŒ ๋งค์šฐ ์‰ฝ๋‹ค๋“ ์ง€ ํ•˜๋Š” ๊ฒƒ. ํ•˜์ง€๋งŒ ์ž„์˜์˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋„ ๋งค์šฐ ๋ฌด๋ฐฉ.

[์ข‹์€ ์ฝ”๋“œ]

  • ์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ
    • ํ•„์š”ํ•˜๋‹ค๋ฉด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•.
  • ์ ์ ˆํ•œ ์žฌ์‚ฌ์šฉ
  • ๋ชจ๋“ˆํ™”
  • ์œ ์—ฐ์„ฑ (3x3 ํ‹ฑํƒํ†  ๋ณด๋‹ค๋Š” nxn ํ‹ฑํƒํ† ๋ฅผ ๊ตฌํ˜„ํ•˜๋“ฏ)
    • ๋‹จ, ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ฑฐ๋‚˜ ์ง€๊ธˆ์€ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ํŒ๋‹จ์ด ๋“ค๋ฉด, ์ผ๋‹จ์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ตฌํ˜„
  • ์˜ค๋ฅ˜ ๊ฒ€์‚ฌ
    • ๊ฐ„๋‹จํ•œ if ๋ฌธ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๊ฒ€์‚ฌ
    • ๋‹น์žฅ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ณต๊ฐ„์„ ๋‚จ๊ฒจ๋‘๊ณ  ๋‚˜์ค‘์— ์ž‘์„ฑํ•˜๊ฒ ๋‹ค๋Š” ์–ธ๊ธ‰.

[ํฌ๊ธฐํ•˜์ง€ ๋ง ๊ฒƒ]
๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ์— ๋‹น๋‹นํžˆ ๋งž์„œ๊ธฐ.
์ถ”๊ฐ€ '์ ์ˆ˜'๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์–ด๋ ค์šด ๋ฌธ์ œ๋ฅผ ์ฆ๊ธฐ๋ฉฐ ํ‘ธ๋Š” ๋ชจ์Šต์„ ๋ณด์—ฌ๋ผ.

ํ•ฉ๊ฒฉํ•œ ๋’ค์—

[์ž…์‚ฌ ๊ฒฐ์ •]

  • ๋ณดํ†ต ํšŒ์‚ฌ๊ฐ€ ์ œ์•ˆ์„ ํ•˜๋ฉด, deadline์ด ์žˆ์Œ (์ฃผ๋กœ 1~4์ฃผ)
  • ๊ธฐํ•œ ์—ฐ์žฅ์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๊ณ , ๋Œ€๋ถ€๋ถ„ ํšŒ์‚ฌ๋Š” ๊ฐ€๋Šฅํ•œ ๋“ค์–ด์ฃผ๋ ค๊ณ  ํ•จ
  • ๊ฑฐ์ ˆํ•  ๋•Œ๋Š” ๊ณต๊ฒฉ์ ์ด์ง€ ์•Š๊ณ  ๋ช…๋ฐฑํ•œ ์ด์œ ๋ฅผ ๋Œˆ ๊ฒƒ

[์ž…์‚ฌ๋ฅผ ๊ณ ๋ฏผํ•  ๋•Œ]

  • ๊ธˆ์ „์ ์ธ ๋ถ€๋ถ„
    • ์—ฐ๋ด‰์€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ๋“ค ๊ฐ€์šด๋ฐ ํ•˜๋‚˜ ์ผ ๋ฟ
    • ๊ณ„์•ฝ ๋ณด๋„ˆ์Šค, ์ฃผ๊ฑฐ ์ƒํ™œ ๋น„์šฉ, ์—ฐ๊ฐ„ ๋ณด๋„ˆ์Šค, ์Šคํ†ก์˜ต์…˜
  • ์ปค๋ฆฌ์–ด
  • ํšŒ์‚ฌ์˜ ์•ˆ์ •์„ฑ (ํ•ด๊ณ  ๊ฐ€๋Šฅ์„ฑ)
    • ์•ˆ์ •์ ์ธ ํšŒ์‚ฌ์ผ์ˆ˜๋ก ๋Š๋ฆฌ๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ๊ฒฝํ–ฅ
  • ํ–‰๋ณต
    • ์ œํ’ˆ, ๊ด€๋ฆฌ์ž, ๋™ํ‘œ, ๋ฌธํ™”, ๊ทผ๋ฌด ์‹œ๊ฐ„

[์—ฐ๋ด‰ ํ˜‘์ƒ]

  • ์ผ๋‹จ ์ง€๋ฅด๊ณ  ๋ณด๋ผ
    • ๋Œ€๋ถ€๋ถ„ ํ˜‘์ƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Œ. ํ•˜์ง€๋งŒ ๊ทธ๋ž˜์„œ ํ•ด๋ณผ๋งŒ ํ•จ.
    • ํ˜‘์ƒ์„ ์‹œ๋„ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ฑ„์šฉ ์ œ์•ˆ์„ ์ฒ ํšŒํ•˜๋Š” ํšŒ์‚ฌ๋Š” ์—†์Œ.
  • ๊ตฌ์ฒด์ ์œผ๋กœ ์š”๊ตฌํ•˜๊ณ , ๋งŽ์ด ์š”๊ตฌํ•ด๋ผ
    • ํ˜‘์ƒ์ด๋ž€ ๊ทธ๋Ÿฐ ๊ฒƒ. ์–ด์ฐจํ”ผ ๋ฌด์Šจ ์š”๊ตฌ๋ฅผ ํ•˜๋“  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋“ค์–ด์ฃผ์ง€ ์•Š์Œ.
  • ๋Œ€๊ธฐ์—…์€ ์—ฐ๋ด‰ ํ…Œ์ด๋ธ”์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค.

[์ž…์‚ฌ ํ›„]

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

๋ฉด์ ‘ ๋ฌธ์ œ

๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด

๋ฐฐ์—ด๊ณผ ๋ฌธ์ž์—ด์— ๊ด€ํ•œ ๋ฌธ์ œ๋Š” ์„œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.

ํ•ด์‹œํ…Œ์ด๋ธ”

  • ํšจ์œจ์ ์ธ "ํƒ์ƒ‰"์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • key๋ฅผ value์— ๋Œ€์‘์‹œํ‚ค๋Š” ํ˜•ํƒœ
  1. ๋ฐฐ์—ด๊ณผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํ•ด์‹œ์ฝ”๋“œ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹ - O(1)
    • ์ €์žฅ
      1. ํ•ด์‹œ์ฝ”๋“œ ํ•จ์ˆ˜๋กœ key์˜ ํ•ด์‹œ ์ฝ”๋“œ๋ฅผ ๊ณ„์‚ฐ
      2. ํ•ด์‹œ์ฝ”๋“œ๋กœ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐ (e.g. hashCode % arrayLength)
      3. ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— key์™€ value๋ฅผ ์ €์žฅ
    • ํƒ์ƒ‰
      • ์œ„์˜ a, b ์ดํ›„์— ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ key๋ฅผ ํ†ตํ•ด ์ฐพ๋Š”๋‹ค
    • ์ถฉ๋Œ
      • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ํ‚ค๊ฐ€ ๊ฐ™์€ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒฝ์šฐ. ์ด๋ž˜์„œ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉ.
  2. ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹ - O(logN)

ArrayList ๊ฐ€๋ณ€ ํฌ๊ธฐ ๋ฐฐ์—ด

  • ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ ˆํ•ด์ฃผ๋Š” ๋ฐฐ์—ด
  • ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๋ฐฉ์‹
  • ์ƒํ™˜ ์‹œ๊ฐ„ ๊ฐœ๋…์„ ํ†ตํ•ด O(1)์˜ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ๊ฐ€์ง

StringBuilder

  • (์ž๋ฐ”์—์„œ) String ์ž๋ฃŒํ˜•์€ immutable ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌธ์ž์—ด์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์„ ํ•˜๋ ค๋ฉด ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•จ.
  • ๊ธธ์ด๊ฐ€ ๋ชจ๋‘ s์ธ ๋ฌธ์ž์—ด n๊ฐœ๋ฅผ ์ „๋ถ€ ์ด์–ด๋ถ™์ธ๋‹ค๋ฉด
    - s๊ฐœ, 2s๊ฐœ, 3s๊ฐœ, ..., nx๊ฐœ : ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ถ™์ผ ๋•Œ ๋งˆ๋‹ค ๋ณต์‚ฌ๋ฅผ ํ•ด์•ผํ•จ -> O(sn^2)
  • StringBuilder ๋Š” ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฐฐ์—ด์„ ์ด์šฉํ•ด, ๋งค๋ฒˆ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•„์š”ํ•  ๋•Œ๋งŒ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ.

๋ฉด์ ‘ ๋ฌธ์ œ

1.1_ ascii ๋ฉด, ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์˜ ์ข…๋ฅ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋งŒํผ ๋ฏธ๋ฆฌ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด๋‘๊ณ , ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋“ค์„ ํ•˜๋‚˜์”ฉ ๋ณด๋ฉด์„œ ๊ทธ ์ข…๋ฅ˜์— ํ•ด๋‹นํ•˜๋Š” ์ธ๋ฑ์Šค์— ํ‘œ์‹œ๋ฅผ ํ•ด๋‘๋ฉด์„œ ์ฒดํฌํ•˜๋ฉด ์ค‘๋ณต ํ™•์ธ์ด ๊ฐ€๋Šฅ -> O(n). ๋ฐฐ์—ด ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๋ชจ๋“  ์Œ์„ ๋‹ค ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜(n^2) ์ •๋ ฌ์„ ํ•ด์„œ ์ธ์ ‘ํ•œ ๋ฌธ์ž๋งŒ ๋น„๊ตํ•œ๋‹ค(nlogn).

1.2 ๊ธธ์ด๊ฐ€ ๊ฐ™์•„์•ผ ํ•˜๊ณ , ๋‘ ๋ฌธ์ž์—ด์˜ '๋ฌธ์ž ๊ตฌ์„ฑ'์ด ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜๋ฉด ๋จ. counter ๋ฐฐ์—ด์„ ๋ฌธ์ž ์ข…๋ฅ˜ ํฌ๊ธฐ๋งŒํผ ํ• ๋‹นํ•ด ๋‘๊ณ , ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ ํ›„, ๋‘๋ฒˆ์งธ ๋ฌธ์ž์—ด์„ ํ™•์ธํ•  ๋•Œ ์ด ๊ฐœ์ˆ˜๋“ค์„ ์ง€์›Œ๋‚˜๊ฐ€๋ฉด์„œ ํ™•์ธ.

1.3 ๋ฌธ์ž์—ด์„ ์ง์ ‘ ์กฐ์ž‘ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ, "๋ฌธ์ž์—ด์„ ๋’ค์—์„œ๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ํŽธ์ง‘" ํ•˜๋Š” ํŒจํ„ด์ด ์ž์ฃผ ์“ฐ์ž„.
์ž…๋ ฅ์œผ๋กœ ๋ฐ›์€ ๋ฌธ์ž์—ด์— ๋Œ€๊ณ  ์ง์ ‘ ํŽธ์ง‘์„ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, ์•ž์—์„œ๋ถ€ํ„ฐ ํŽธ์ง‘์„ ํ•˜๋‹ค๊ฐ€ ์•„์ง ํ™œ์šฉํ•˜์ง€ ๋ชปํ•œ ๊ธฐ์กด ๋ฌธ์ž๋ฅผ ๋ฎ์–ด์“ธ ์—ผ๋ ค๊ฐ€ ์žˆ์Œ.
๊ทธ๋ž˜์„œ ํŽธ์ง‘์— ํ•„์š”ํ•œ ์—ฌ์œ ๊ณต๊ฐ„์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜๊ณ , ๊ธฐ์กด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด์— ๊ทธ ์—ฌ์œ ๊ณต๊ฐ„ ๋งŒํผ์„ ๋”ํ•œ ์ด ๊ณต๊ฐ„์„ ํ™•๋ณด ํ›„ ๋’ค์—์„œ๋ถ€ํ„ฐ ํŽธ์ง‘์„ ์‹œ์ž‘.

1.4 ์—ญ์‹œ๋‚˜ ๋ฌธ์ž์˜ ์ข…๋ฅ˜๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฅ˜๋ณ„๋กœ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ๊ฐ ์ข…๋ฅ˜์˜ ๊ฐœ์ˆ˜๋“ค์ด ์ „๋ถ€ ์ง์ˆ˜์ด๊ฑฐ๋‚˜, ํ•˜๋‚˜๋งŒ 1๊ฐœ ์ด๋ฉด ๋œ๋‹ค. ๊ณต๊ฐ„ ํšจ์œจ์ ์œผ๋กœ, ๋น„ํŠธ ๋ฒกํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์ข…๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋ ๋•Œ ํ† ๊ธ€ํ•˜๋Š” ์‹์œผ๋กœ ๊ธฐ๋กํ•ด๋‘์–ด๋„ ๋œ๋‹ค.

์ด๋•Œ ๊ฒฐ๊ณผ๋ฅผ ํŒ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํŠธ ๋ฒกํ„ฐ(์ˆซ์ž)๊ฐ€ ์•„์˜ˆ 0 ์ด๊ฑฐ๋‚˜, ํ•˜๋‚˜์˜ ๋น„ํŠธ๋งŒ 1์ธ ์ƒํ™ฉ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ํ›„์ž์˜ ๊ฒฝ์šฐ, ์ˆซ์ž์—์„œ 1(2^0) ์„ ๋บ€ ๊ฐ’๊ณผ ๊ธฐ์กด ์ˆซ์ž๋ฅผ AND ์—ฐ์‚ฐํ–ˆ์„ ๋•Œ 0์ด ๋‚˜์˜จ๋‹ค๋ฉด, ํ•ด๋‹น ์ˆซ์ž๋Š” ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ๋น„ํŠธ๋งŒ 1์ด์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

ex)
00010000 - 1 = 00001111
00101000 - 1 = 00100111

1.5 ๋‘ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ํฌ์ธํ„ฐ๋ฅผ ๋™์‹œ์— ์ด๋™ํ•˜๋ฉฐ ์กฐ๊ฑด์— ๋ถ€ํ•ฉํ•˜๋Š”์ง€ ํŒ๋‹จ

1.6 ๋ฌธ์ž์—ด์— ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์ผ๋•Œ, ๋‘ ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์ฝ์–ด๋“ค์—ฌ ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด์— ๋ณต์‚ฌํ•ด์•ผ ํ•œ๋‹ค. ๊ณต๊ฐ„ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด StringBuilder๋ฅผ ์ ๊ทน ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.(๊ฐ€๋ณ€ ๊ธธ์ด ๋ฐฐ์—ด๋กœ ๋™์ž‘)

1.8 ์–ด๋–ค ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ, ํŠน์ • ํ–‰/์—ด์— ๋ชจ๋‘ ์ ์šฉํ•˜๋Š” ์†์„ฑ์„ ํ–‰๋ ฌ์˜ ์ฒซ๋ฒˆ์งธ ํ–‰/์—ด์— ์ž‘์„ฑํ•ด ๋‘๋ฉด ๊ณต๊ฐ„ํšจ์œจ์„ O(1)๋กœ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

  • ์ฐจ๋ก€๋กœ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

  • ๋‹จ๋ฐฉํ–ฅ ๋˜๋Š” ์–‘๋ฐฉํ–ฅ

  • ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ํŠน์ • ์›์†Œ(์ธ๋ฑ์Šค)๋ฅผ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†์Œ.

  • ์‹œ์ž‘์ ์—์„œ ์›์†Œ๋ฅผ ์ถ”๊ฐ€/์‚ญ์ œ ํ•˜๋Š” ์—ฐ์‚ฐ์„ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ํ•  ์ˆ˜ ์žˆ์Œ.
    (ํŠน์ • ์›์†Œ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ๊ณณ์— ์ถ”๊ฐ€/์‚ญ์ œ ๋˜ํ•œ ์ƒ์ˆ˜ ์‹œ๊ฐ„์— ํ•  ์ˆ˜ ์žˆ์Œ)

  • ๊ฐ ๋…ธ๋“œ ์›์†Œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋” ํฐ ํด๋ž˜์Šค(LinkedList ํด๋ž˜์Šค)๊ฐ€ ์—†๋‹ค๋ฉด, ๊ฒฐ๊ตญ head๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๊ณง ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ๋จ. -> head๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ, ์ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ์ ‘๊ทผํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” head ์ •๋ณด๊ฐ€ ๋™๊ธฐํ™” ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ƒ๊น€.

  • Node ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๋Š” LinkedList ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Runner ๊ธฐ๋ฒ•

์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•  ๋•Œ ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋„๋ก ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ.
Runner ํฌ์ธํ„ฐ๊ฐ€ Current ํฌ์ธํ„ฐ๋ณด๋‹ค ์•ž์„œ๋„๋ก ํ•˜๋ฉด์„œ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•.

์˜ˆ๋ฅผ ๋“ค์–ด, a1->a2->a3->a4->a5->b1->b2->b3->b4->b5 ๊ฐ™์€ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ,
a1->b1->a2->b2->...->an->bn ์™€ ๊ฐ™์ด ์žฌ์ •๋ ฌ ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ํ•˜์ž.
Current ํฌ์ธํ„ฐ๋Š” ํ•œ ์นธ์”ฉ ์ง„ํ–‰ํ•˜๊ณ , Runner ํฌ์ธํ„ฐ๋Š” ๋‘ ์นธ์”ฉ ์ง„ํ–‰ํ•˜๋ฉด, Runner๊ฐ€ ๋์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ Current๋Š” ๊ฐ€์šด๋ฐ ์ง€์ ์— ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ Runner ๋ฅผ ๋‹ค์‹œ ๋งจ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์„œ ํ•œ์นธ์”ฉ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๋˜ Current ๊ฐ€ ์•ž์œผ๋กœ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋  ์›์†Œ๋“ค์„ Runner์˜ ๋‹ค์Œ ์ž๋ฆฌ์— ๋ฐ€์–ด๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์žฌ๊ท€ ๋ฌธ์ œ

์žฌ๊ท€ ํ˜ธ์ถœ์€ ๋‹จ๋ฐฉํ–ฅ ํ๋ฆ„์—์„œ ๋’ค๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•.
์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๊ด€๋ จ ๋ฌธ์ œ ๊ฐ€์šด๋ฐ ์ƒ๋‹น์ˆ˜๋Š” ์žฌ๊ท€ ํ˜ธ์ถœ์— ์˜์กดํ•จ.

๋ฉด์ ‘ ๋ฌธ์ œ

2.2 ๊ฒฐ๋ก ์€ Runner ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ Current ํฌ์ธํ„ฐ๊ฐ€ ํ•ญ์ƒ ์ž์‹ ๋ณด๋‹ค k๊ฐœ ๋’ค์— ์žˆ๋„๋ก ์ˆœํšŒํ•˜๋ฉด ๋œ๋‹ค.
brute-force๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋๊นŒ์ง€ ์ˆœํšŒํ•ด์„œ ์ด ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ณ , ๋’ค์—์„œ k๋ฒˆ์งธ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ณ„์‚ฐํ•ด(n-k ๋ฒˆ์งธ) ํ•ด๋‹น ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๋ฉด ๋œ๋‹ค. ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด ๊ธธ์ด ๊ณ„์‚ฐ ์‹œ์— Current ํฌ์ธํ„ฐ๋ฅผ ๋’ค๋”ฐ๋ฅด๊ฒŒ ํ•ด๋‘์–ด์„œ ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ์‹.

2.3 ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ์ด๋ฏ€๋กœ, ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋’ค์— ์žˆ๋Š” ๋…ธ๋“œ๋“ค์˜ ์ •๋ณด๋งŒ ์กฐํšŒํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ๊ฐ€ ๋งˆ์น˜ ๊ทธ ๋‹ค์Œ๋…ธ๋“œ์ฒ˜๋Ÿผ ์กด์žฌํ•˜๋„๋ก ์ˆ˜์ •ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์‚ญ์ œํ•˜๋ ค๋Š” ๋…ธ๋“œ์˜ data๋ฅผ ๊ทธ ๋‹ค์Œ node์˜ data๋กœ, next ์ •๋ณด๋ฅผ ๊ทธ ๋‹ค์Œ node์˜ next ์ •๋ณด๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

2.4 ํฌ์ธํ„ฐ ๋‘๊ฐœ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋‚˜(p1)๋Š” ์ž์‹ ์ด ์ง€๋‚˜์˜จ ๊ณณ์—๋Š” ๋ฌด์กฐ๊ฑด x๋ณด๋‹ค ์ž‘์€ ์›์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๋„๋ก ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ํ•˜๋‚˜(p2)๋Š” x๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค์„ ์ฐพ์œผ๋Ÿฌ ๋จผ์ € ๋‚˜๊ฐ€์„œ ์ฐพ์•„๋ณด๊ฒŒ ํ•˜๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค. p1์ด x๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ์›์†Œ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, p2๋Š” ์ž์‹ ์ด ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์•˜๋˜ ์ง€์ ์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ x๋ณด๋‹ค ์ž‘์€ ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋ฐœ๊ฒฌํ•˜๋ฉด p1 ์ž๋ฆฌ์˜ ์›์†Œ์™€ ๊ต์ฒดํ•œ๋‹ค. p2๋Š” ํ•ญ์ƒ p1๊ณผ ๊ฐ™์€ ์œ„์น˜ ํ˜น์€ ๋” ์ง„ํ–‰ํ•œ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. p2๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๋์— ๋„๋‹ฌํ•˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค.

์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“ ๋‹ค. ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ธ๋ฐ, ์–ด๋–ค node๋ฅผ ์žฌ๋ฐฐ์น˜ ํ•˜๊ณ ์ž ํ•  ๊ฒฝ์šฐ, node.next๋ฅผ ๋ฏธ๋ฆฌ ๊บผ๋‚ด๋‘๊ณ  node.next๊ฐ€ ์›ํ•˜๋Š” ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

2.6 ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Stack์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ํก์‚ฌํ•˜๋‹ค.
์žฌ๊ท€ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๊ฐ’์ด 2๊ฐœ ์ด์ƒ์ด์–ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. ํŒŒ์ด์ฌ์ด ์•„๋‹ˆ๋ผ๋ฉด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ™œ์šฉํ•œ๋‹ค.

2.8 Tortoise & Hare Algorithm
1) T๊ฐ€ ํ•œ ์นธ์”ฉ, H๊ฐ€ ๋‘ ์นธ์”ฉ ์›€์ง์ด๋„๋ก ํ–ˆ์„ ๋•Œ, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์— ๋ฃจํ”„๊ฐ€ ์žˆ๋‹ค๋ฉด T์™€ H๋Š” ๊ฒฐ๊ตญ ๋งŒ๋‚˜๊ฒŒ ๋œ๋‹ค.
2) ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘์ , ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๋ฅผ ๋‘˜์ด ๋งŒ๋‚œ ์ง€์ ์— ๋‘๊ณ  ๋‘˜ ๋ชจ๋‘๋ฅผ ํ•œ ์นธ์”ฉ ์ง„ํ–‰์‹œํ‚ค๋ฉด, ๋ฃจํ”„์˜ ์‹œ์ž‘ ์ง€์ ์—์„œ ๋งŒ๋‚˜๊ฒŒ ๋œ๋‹ค.

๊ฐ„๋‹จํ•œ ์ฆ๋ช… 1 : ๋ฃจํ”„๊ฐ€ ์—†๋‹ค๋ฉด, H๋Š” ๊ฒฐ๊ตญ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์˜ ๋์— ๋„๋‹ฌํ•  ๊ฒƒ์ด๋‹ค. ๋ฃจํ”„๊ฐ€ ์žˆ๋‹ค๋ฉด, H๊ฐ€ T๋ณด๋‹ค ๋ฌด์กฐ๊ฑด ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— T๊ฐ€ ๋ฃจํ”„์˜ ์‹œ์ž‘์— ๋„๋‹ฌ ํ–ˆ์„ ๋•Œ H๋Š” ๋ฃจํ”„์˜ ์–ด๋”˜๊ฐ€์— ์œ„์น˜ํ•ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ฃจํ”„๋Š” ๊ฒฐ๊ตญ '์›'์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์›€์ง์ธ๋‹ค๋ฉด ์ด๋ฏธ ๋ฃจํ”„ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” H๊ฐ€ ๋ฃจํ”„ ์‹œ์ž‘์— ์žˆ๋Š” T๋ฅผ ๋’ค์ซ“๋Š” ๊ด€์ ์œผ๋กœ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ, T๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ H๋Š” ํ•œ ๋ฒˆ์— ๋‘ ์นธ์”ฉ ์›€์ง์ด๋ฏ€๋กœ, ๊ฒฐ๊ตญ H๊ฐ€ T์— ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ ๊ฐ€๊นŒ์›Œ ์ง€๋Š” ๊ผด์ด ๋œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋‘˜์€ ๋ฌด์กฐ๊ฑด ๋งŒ๋‚  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

๊ฐ„๋‹จํ•œ ์ฆ๋ช… 2: T๊ฐ€ 1์นธ ๊ฐˆ๋•Œ H๋Š” 2์นธ ๊ฐ„๋‹ค. T๊ฐ€ k์นธ ๊ฐˆ๋•Œ H๋Š” 2k์นธ ๊ฐ„๋‹ค. T๊ฐ€ k๋งŒํผ ์›€์ง์—ฌ ๋ฃจํ”„ ์‹œ์ž‘์ ์— ๋„์ฐฉํ–ˆ๋‹ค๋ฉด ๊ทธ๋™์•ˆ H๋Š” 2k๋งŒํผ ์›€์ง์˜€์„ ํ…๋ฐ, H๋Š” ์ด๋ฏธ ๋ฃจํ”„ ์•ˆ์„ ๋Œ๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. H๊ฐ€ ๋ฃจํ”„ ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ ์›€์ง์ธ ๊ฑฐ๋ฆฌ๋Š” 2k-k=k ์ด๋‹ค. ์ด๋•Œ k๋Š” ๋ฃจํ”„์˜ ์ด ๊ธธ์ด๋ณด๋‹ค ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ข€ ๋” ์ •ํ™•ํ•˜๊ฒŒ H๋Š” ๋ฃจํ”„ ์‹œ์ž‘์ ์œผ๋กœ๋ถ€ํ„ฐ k%LOOP_SIZE = K ๋งŒํผ ์ง„ํ–‰ํ•ด ์žˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ๋ฃจํ”„ ์‹œ์ž‘์ ์— ์žˆ๋Š” T์— ๋Œ€ํ•ด H๊ฐ€ LOOP_SIZE-K ๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋‹ค๋Š” ๊ด€์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ณ  (๋ฃจํ”„ ์‹œ์ž‘์—์„œ K๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋Š” ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ํ‘œํ˜„. ๊ทธ๊ฑด ๊ทธ๋ƒฅ K๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋Š” ๊ฒƒ), T๋Š” H์—๊ฒŒ ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ ๋”ฐ๋ผ์žกํžˆ๋ฏ€๋กœ LOOP_SIZE-K ๋‹จ์œ„์‹œ๊ฐ„ ๋งŒํผ ์›€์ง์ด๋ฉด ๋‘˜์€ ๋งŒ๋‚œ๋‹ค. ๋‘˜์ด ๋งŒ๋‚˜๋Š” ์ง€์ ์€ T์˜ ์›€์ง์ž„์„ ํ†ตํ•ด ๊ณ„์‚ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, T๋Š” ๋ฃจํ”„์˜ ์‹œ์ž‘์ ์—์„œ ์ถœ๋ฐœํ•ด ํ•œ ๋ฒˆ์— ํ•œ ์นธ์”ฉ ์›€์ง์ด๋ฏ€๋กœ, LOOP_SIZE-K ๋‹จ์œ„ ์‹œ๊ฐ„ ์ดํ›„์—๋Š” ๋ฃจํ”„ ์‹œ์ž‘์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ LOOP_SIZE-K ์ง„ํ–‰ํ•œ ๊ณณ์— ์žˆ์„ ๊ฒƒ. ๊ทธ๊ณณ์„ ๋‹ฌ๋ฆฌ ๋งํ•˜๋ฉด ๋ฃจํ”„์˜ ์‹œ์ž‘์ ์œผ๋กœ ๋ถ€ํ„ฐ K ๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋Š” ๊ณณ์ด ๋˜๊ณ , K ๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋Š” ๊ฒƒ์€ k๋งŒํผ ๋’ค์ณ์ ธ ์žˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค(๋ฑ…๊ธ€๋ฑ…๊ธ€ ๋Œ๋ฉด ์–ด์ฐจํ”ผ ๊ฐ™์€ ๊ณณ).

์Šคํƒ๊ณผ ํ

์Šคํƒ : Last In First Out - ๊ฐ€์žฅ ์ตœ์‹ ์˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜
ํ : First In First Out - ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜

๋ฉด์ ‘ ๋ฌธ์ œ

3.2 ์Šคํƒ์˜ ๊ฐ ์›์†Œ๋ฅผ ๋…ธ๋“œ๋กœ ๊ด€๋ฆฌํ•˜๋ฉด value ์™ธ์˜ meta data ๋„ ์ €์žฅํ•ด ๋‘˜ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ, ์ด ๊ฒฝ์šฐ์—” O(n)๋งŒํผ์˜ ์ถ”๊ฐ€ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋„ˆ๋ฌด ์‹ฌํ•  ๊ฒฝ์šฐ meta data๊ฐ€ ์Šคํƒ ์ „์ฒด์˜ ์ƒํƒœ์™€ ๊ด€๋ จํ•œ ๊ฒƒ์ด๋ผ๋ฉด, ๋˜ ๋‹ค๋ฅธ ์Šคํƒ์„ ์ถ”๊ฐ€๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

3.4 3.5 ์Šคํƒ์˜ ์›์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ popํ•ด์„œ ๋‹ค๋ฅธ ์Šคํƒ์— ์ฐจ๋ก€๋กœ push ํ•ด๋‘๋ฉด ์•„๋ž˜ ๋‘ ๊ฐ€์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
1) push ํ•ด๋‘” ์Šคํƒ์—์„œ ์ฐจ๋ก€๋กœ pop ์„ ํ•˜๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ํ์—์„œ ๊บผ๋‚ด์“ฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
2) push ํ•ด๋‘” ์Šคํƒ์˜ ์›์†Œ๋ฅผ ๋‹ค์‹œ ์ฐจ๋ก€๋กœ popํ•ด์„œ ์›๋ž˜ ์Šคํƒ์— pushํ•˜๋ฉด, ์›๋ž˜ ์Šคํƒ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

3.6 ํ๋ฅผ ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, ํ์˜ ์ง„ํ–‰๋ฐฉํ–ฅ์„ tail -> head ๋กœ ๋‘์–ด tail์— ๋„ฃ๊ณ  head์—์„œ ๊บผ๋‚ด์จ์•ผ ํ•œ๋‹ค.
ํ์—์„œ ๊บผ๋‚ธ๋‹ค๋Š” ๊ฒƒ์€ ๋‚ด ์ด์ „ ๋…ธ๋“œ์˜ next๋ฅผ null๋กœ ๋ฐ”๊พธ๋ฉด์„œ ๊บผ๋‚ผ ์›์†Œ๋ฅผ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ์—์„œ ์ œ์™ธํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ํ์˜ ์ง„ํ–‰๋ฐฉํ–ฅ์„ head -> tail ๋กœ ๋‘์–ด head์— ๋„ฃ๊ณ  tail์—์„œ ๊บผ๋‚ด์“ฐ๋ฉด tail์˜ ์ด์ „ ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

ํŠธ๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„

ํŠธ๋ฆฌ

  • ๋…ธ๋“œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ
  • ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ๋ฅผ ๊ฐ–์Œ
  • ๋ฃจํŠธ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–์Œ
  • ๊ทธ ์ž์‹ ๋…ธ๋“œ ๋˜ํ•œ 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ณ , ์ด๋Š” ๋ฐ˜๋ณต์ ์œผ๋กœ ์ •์˜ ๋จ
  • ์ž์‹์ด ์—†๋Š” ๋…ธ๋“œ๋Š” ๋ง๋‹จ ๋…ธ๋“œ(leaf node)๋ผ๊ณ  ๋ถ€๋ฆ„
  • ์‚ฌ์ดํด์€ ์กด์žฌํ•  ์ˆ˜ ์—†์Œ
  • ๊ฐ ๋…ธ๋“œ๋Š” ์–ด๋–ค ์ž๋ฃŒํ˜•์œผ๋กœ๋„ ํ‘œํ˜„ ๊ฐ€๋Šฅ
  • ๊ฐ ๋…ธ๋“œ๋Š” ๋ถ€๋ชจ ๋…ธ๋“œ๋กœ์˜ ์—ฐ๊ฒฐ์ด ์žˆ์„ ์ˆ˜๋„ ์—†์„ ์ˆ˜๋„
  • Node ํด๋ž˜์Šค๋ฅผ ํฌํ•จํ•˜๋Š” Tree ํด๋ž˜์Šค๋Š” ๋ณดํ†ต ์“ธ๋ชจ ์—†์Œ

ํŠธ๋ฆฌ/๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๋Š” ๋ณดํ†ต ์„ธ๋ถ€์‚ฌํ•ญ๊ณผ ๊ฐ€์ •์ด ๋ถˆ๋ถ„๋ช…ํ•˜๊ฑฐ๋‚˜ ๋ถ€์ •ํ™•ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ. ๋ฉด์ ‘๊ด€์—๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์ค„ ๊ฒƒ์„ ์š”๊ตฌ.

ํŠธ๋ฆฌ์˜ ์ข…๋ฅ˜

[์ด์ง„ํŠธ๋ฆฌ]
binary tree

  • ๋ชจ๋“  ํŠธ๋ฆฌ๊ฐ€ ์ด์ง„ ํŠธ๋ฆฌ๋Š” ์•„๋‹˜. ์‚ผ์ง„ ํŠธ๋ฆฌ(ternary tree)๋„ ์žˆ์Œ

[์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ]
binary search tree

"๋ชจ๋“ " ์™ผ์ชฝ ์ž์‹๋“ค <= n < "๋ชจ๋“ " ์˜ค๋ฅธ์ชฝ ์ž์‹๋“ค

์˜ ์†์„ฑ์„ ๋งŒ์กฑํ•˜๋Š” ์ด์ง„ ํŠธ๋ฆฌ.
๋ฐ”๋กœ ์•„๋ž˜ ์ž์‹ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋‚ด ๋ฐ‘์— ์žˆ๋Š” "๋ชจ๋“ " ์ž์‹๋“ค์— ๋Œ€ํ•ด์„œ๋„ ์ฐธ์ด์–ด์•ผ ํ•จ.

๋ชจ๋“  ์ด์ง„ ํŠธ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์•„๋‹ˆ๋‹ค. ํ—ท๊ฐˆ๋ฆฌ๋ฉด ์•ˆ๋จ

[๊ท ํ˜• vs ๋น„๊ท ํ˜•]

  • ํŠธ๋ฆฌ๊ฐ€ ๊ท ํ˜• ์žกํ˜€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ฌด์กฐ๊ฑด ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์˜ ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์™„์ „ํžˆ ๊ฐ™๋‹ค๋Š” ๋ง์€ ์•„๋‹˜.
  • O(logN) ์‹œ๊ฐ„์— ์‚ฝ์ž…๊ณผ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•  ์ •๋„๋กœ๋งŒ ๊ท ํ˜• ์žกํ˜€์žˆ์œผ๋ฉด ๊ท ํ˜• ํŠธ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ, AVL ํŠธ๋ฆฌ ๊ฐ€ ์žˆ์Œ

[ ์™„์ „(complete) / ์ „(full) / ํฌํ™”(perfect) ]

  • ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ : complete binary tree
    • ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์„ ์ œ์™ธํ•œ ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ๊ฐ€ ๊ฝ‰์ฐจ ์žˆ๊ณ 
    • ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ ์žˆ๋Š” ํŠธ๋ฆฌ
  • ์ „ ์ด์ง„ํŠธ๋ฆฌ : full binary tree
    • ์ž์‹์ด ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ํŠธ๋ฆฌ
  • ํฌํ™” ์ด์ง„ํŠธ๋ฆฌ : perfect binary tree
    • full ์ด๋ฉด์„œ complete ์ธ ํŠธ๋ฆฌ
    • ํŠธ๋ฆฌ์˜ ๋†’์ด๊ฐ€ k์ผ ๋•Œ, ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ •ํ™•ํžˆ 2^k - 1 ์ธ ํŠธ๋ฆฌ

์ด์ง„ ํŠธ๋ฆฌ ์ˆœํšŒ

  • ์ค‘์œ„ ์ˆœํšŒ : in-order
    • ์™ผ์ชฝ ์ž์‹ , ํ˜„์žฌ ๋…ธ๋“œ , ์˜ค๋ฅธ์ชฝ ์ž์‹
    • def go(node):
      	if node is not None:
              go(node.left)
              print(node)
              go(node.right)
  • ์ „์œ„ ์ˆœํšŒ : pre-order
    • ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€์žฅ ๋จผ์ €
    • def go(node):
      	if node is not None:
              print(node)
              go(node.left)
              go(node.right)
  • ํ›„์œ„ ์ˆœํšŒ : post-order
    • ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์—
    • def go(node):
      	if node is not None:
              go(node.left)
              go(node.right)
              print(node)

์ด์ง„ ํž™ (์ตœ์†Œํž™/์ตœ๋Œ€ํž™)

  • ์ตœ์†Œํž™๊ณผ ์ตœ๋Œ€ํž™์€ ์ •๋ ฌ์˜ ๋ฐฉํ–ฅ๋งŒ ๋‹ค๋ฅด๊ณ  ๋ณธ์งˆ์€ ๊ฐ™์Œ. ์—ฌ๊ธฐ์„  ์ตœ์†Œํž™๋งŒ.

  • ๊ฐ ๋…ธ๋“œ์˜ ์›์†Œ๊ฐ€ ์ž์‹'๋“ค'์˜ ์›์†Œ๋ณด๋‹ค ์ž‘๋‹ค.

  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ (complete)

  • ์‚ฝ์ž…

    • ๊ฐ€์žฅ ๋ฐ‘๋ฐ”๋‹ฅ ์˜ค๋ฅธ์ชฝ ์œ„์น˜์— ์‚ฝ์ž… ํ›„
    • ์ตœ์†Œ ํž™์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ ์›์†Œ์™€ ๊ตํ™˜ํ•ด ๋‚˜๊ฐ
    • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ n์ผ ๋•Œ O(logN)
  • ์ตœ์†Œ๊ฐ’ ์ถ”์ถœ

    • ๊ทธ๋ƒฅ ๋ฃจํŠธ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฝ‘์œผ๋ฉด ๊ทธ๊ฒŒ ์ตœ์†Œ๊ฐ’
    • ๋นˆ ๋ฃจํŠธ ์ž๋ฆฌ์— ๊ฐ€์žฅ ๋ฐ‘๋ฐ”๋‹ฅ ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•œ ์›์†Œ๋ฅผ ๊บผ๋‚ด์„œ ๋„ฃ๊ณ 
    • ์ตœ์†Œ ํž™์˜ ์„ฑ์งˆ์„ ๋งŒ์กฑํ•  ๋•Œ๊นŒ์ง€ ์ž์‹ ์›์†Œ"๋“ค"๊ณผ ๊ตํ™˜ํ•ด ๋‚˜๊ฐ
    • ์™ผ์ชฝ ์ž์‹๊ณผ ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ค‘ ๋” ์ž‘์€ ์ž์‹๊ณผ ๊ตํ™˜ํ•ด์•ผ ์ตœ์†Œ ํž™์˜ ์„ฑ์งˆ ๋งŒ์กฑ ๊ฐ€๋Šฅ
    • ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ n์ผ ๋•Œ O(logN)

ํŠธ๋ผ์ด (์ ‘๋‘์‚ฌ ํŠธ๋ฆฌ)

prefix tree. trie.
์žฌ๋ฐŒ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ.
๋ฉด์ ‘์—์„  ๋นˆ์ถœ. ๋ณดํ†ต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฑ…์—์„œ๋Š” ์†Œํ™€.

  • ๊ฐ ๋…ธ๋“œ์— ๋ฌธ์ž(character)๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ (๋ฌธ์ž์—ดX)
  • ๋ฃจํŠธ์—์„œ ์•„๋ž˜์ชฝ ๋๊นŒ์ง€ ์ˆœํšŒํ•˜๋ฉด ๋‹จ์–ด ํ•˜๋‚˜๊ฐ€ ๋‚˜์˜ด
  • null node๋กœ ๋‹จ์–ด์˜ ๋์„ ํ‘œํ˜„
  • ALPHABET_SIZE+1 ๊ฐœ์ˆ˜๊นŒ์ง€์˜ ์ž์‹์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
    (null node ์—†์ด node ๋‚ด์˜ ํ”Œ๋ž˜๊ทธ๋กœ ๋‹จ์–ด๋์„ ํ‘œํ˜„ํ•˜๋ฉด ALPHABET_SIZE ๊ฐœ์ˆ˜๊นŒ์ง€)

์ž…๋ ฅ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋œ ๋ฌธ์ž์—ด์˜ '์ ‘๋‘์‚ฌ' ์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ์— ๋งค์šฐ ์œ ๋ฆฌ.
(X๋ฌธ์ž์—ด์ด Y๋ฌธ์ž์—ด์˜ ์ ‘๋‘์‚ฌ์ธ์ง€ -> Y๋ฌธ์ž์—ด์ด X๋ฌธ์ž์—ด๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€)

  • ์ €์žฅ๋œ ๋ฌธ์ž์—ด๋“ค์ด ํŠธ๋ผ์ด ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ K์ผ๋•Œ O(K) ์‹œ๊ฐ„์— ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์ด '์œ ํšจํ•œ ์ ‘๋‘์‚ฌ' ์ธ์ง€ (์ €์žฅ๋œ ๋ฌธ์ž์—ด ์ค‘ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ์ ‘๋‘์‚ฌ๋กœ ๊ฐ–๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€) ํ™•์ธ ๊ฐ€๋Šฅ.

  • ํ•ด์‹œํ…Œ์ด๋ธ”์€ ์™„๊ฒฐ๋œ ๋‹จ์–ด ๋‹จ์œ„๋กœ ๋Œ€์‘์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์—,

    • ์ €์žฅ๋œ ๋ฌธ์ž์—ด๋“ค ์ค‘ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์ด ์žˆ๋Š”์ง€๋Š” O(K)์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
    • ์ €์žฅ๋œ ๋ฌธ์ž์—ด๋“ค ์ค‘ ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์„ ์ ‘๋‘์‚ฌ๋กœ ๊ฐ–๋Š” ๋ฌธ์ž์—ด์€ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.

ํ•ด์‹œํ…Œ์ด๋ธ”๋„ ํ•ด์‹ฑ์„ ํ•  ๋•Œ ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ํ•œ๊ธ€์ž์”ฉ ์ฝ๊ธฐ ๋•Œ๋ฌธ์—, K์ธ ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š”๋ฐ O(K) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆผ

  • ์ €์žฅ๋œ ๋ฌธ์ž์—ด ๋ชจ์Œ(์œ ํšจํ•œ ๋‹จ์–ด ์ง‘ํ•ฉ) ์„ ์ด์šฉํ•˜๋Š” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํŠธ๋ผ์ด๋กœ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ
    e.g. ์„œ๋กœ ์—ฐ๊ด€๋œ ์ ‘๋‘์‚ฌ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ (M, MA, MAN, MANY ๋ฅผ ์ฐจ๋ก€๋กœ ๊ฒ€์ƒ‰)์—์„œ ํ•ญ์ƒ ๋ฃจํŠธ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํ˜„์žฌ ๋…ธ๋“œ์˜ ์œ„์น˜๋ฅผ ๊ธฐ์–ตํ•ด ์ตœ์ ํ™” ๊ฐ€๋Šฅ.

๊ทธ๋ž˜ํ”„

  • ๋…ธ๋“œ์™€ ๊ทธ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์„ ํ•˜๋‚˜๋กœ ๋ชจ์•„ ๋†“์€ ๊ฒƒ
  • ํŠธ๋ฆฌ๋Š” '์‚ฌ์ดํด์ด ์—†๋Š”' ํ•˜๋‚˜์˜ '์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„'
  • ๊ทธ๋ž˜ํ”„๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ '๊ณ ๋ฆฝ๋œ ๋ถ€๋ถ„๊ทธ๋ž˜ํ”„'(isolated subgraphs)๋กœ ๊ตฌ์„ฑ๋  ์ˆ˜ ์žˆ์Œ
    (์–ด๋–ค ๋‘ ์ •์ ์— ๋Œ€ํ•ด '๊ฒฝ๋กœ'๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Œ)
  • ๋ชจ๋“  ์ •์  ์Œ์— ๋Œ€ํ•ด '๊ฒฝ๋กœ'๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ '์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„' ๋ผ๊ณ  ํ•จ.
  • ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ '๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„' ๋ผ๊ณ  ํ•จ.
    ์‚ฌ์ดํด : ์‹œ์ž‘์ ๊ณผ ๋์ ์ด ๊ฐ™์€ ๊ฒฝ๋กœ. ์ •์ ์„ ์ค‘๋ณต์œผ๋กœ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ณ , ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๊ฐ„์„ ์„ ํฌํ•จํ•ด์•ผ ํ•จ.

[์ธ์ ‘ ๋ฆฌ์ŠคํŠธ / ์ธ์ ‘ ํ–‰๋ ฌ]
์ธ์ ‘๋ฆฌ์ŠคํŠธ

  • ๋ฐฐ์—ด(ํ˜น์€ ํ•ด์‹œํ…Œ์ด๋ธ”)์˜ ๊ฐ ์›์†Œ๋ฅผ ๊ฐ ์ •์ ์— ๋Œ€์‘์‹œํ‚ค๋˜, ๊ฐ ์›์†Œ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด/๊ฐ€๋ณ€ํฌ๊ธฐ๋ฐฐ์—ด/์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ ๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ์ธ์ ‘ ์ •๋ณด๋ฅผ ์ €์žฅ.

์ธ์ ‘ ํ–‰๋ ฌ

  • N*N boolean ํ–‰๋ ฌ๋กœ ํ‘œํ˜„. matrix[i][j]๊ฐ€ true ์ด๋ฉด ์ •์  i์—์„œ ์ •์  j๋กœ ๊ฐ„์„ ์ด ์žˆ๋‹ค๋Š” ๋œป.
  • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ‘ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•˜๋ฉด, ๊ทธ ํ–‰๋ ฌ์€ ๋Œ€์นญํ–‰๋ ฌ(symmetric)์ด ๋œ๋‹ค.

[๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰]
DFS: depth-first search

  • ์ž„์˜์˜ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ(branch)๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ๋ฒ•
  • ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•  ๋•Œ ์„ ํ˜ธ๋จ
  • ํŠธ๋ฆฌ ์ˆœํšŒ๋Š” DFS์˜ ํ•œ ์ข…๋ฅ˜. ํ•˜์ง€๋งŒ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์—์„  ์ค‘๋ณต ๋ฐฉ๋ฌธ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฒ€์‚ฌํ•ด์•ผํ•จ.
void search(Node root) {
	if (root == null) return;
    
    visit(root);
    root.visited = true;
    
    for each (Node n in root.adjacent) {
    	if (n.visited == false) {
        	search(n);
        }
    }
}

BFS: breadth-first search

  • ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ๋จผ์ € ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹
  • ๋‘ ๋…ธ๋“œ ์‚ฌ์ด ์ตœ๋‹จ ๊ฒฝ๋กœ ํ˜น์€ ์ž„์˜์˜ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ  ์‹ถ์„ ๋•Œ ์„ ํ˜ธ๋จ
  • ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ผ ๋‹จ๊ณ„๋ณ„๋กœ ํƒ์ƒ‰ํ•œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ
  • ํ(queue)๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„
void search(Node root) {
	if (root == null) return;
    
    Queue queue = new Queue();
    root.marked = true;
	queue.enqueue(root);
    
    while (!queue.isEmpty()) {
    	Node r = queue.dequeue();
        visit(r)
        foreach (Node n in r.adjacent) {
        	if (n.marked == false) {
            	n.marked = true;	// enqueue ํ–ˆ๋‹ค๊ณ  ๋ฐ”๋กœ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ์— ์ค‘๋ณต์œผ๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก check ํ›„ enqueue ํ•œ๋‹ค.
                queue.enqueue(n);
            }
        }
    }
}

์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰: bidirectional search

  • ์ถœ๋ฐœ์ง€์™€ ๋„์ฐฉ์ง€ ๋‘ ๋…ธ๋“œ์—์„œ ๋™์‹œ์— BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค, ๋‘ ํƒ์ƒ‰ ์ง€์ ์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ์— ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹
  • ์˜ˆ์‹œ:
    ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ ์–ด๋„ k๊ฐœ์˜ ์ด์›ƒ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ , s์—์„œ t๋กœ์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ d๊ฐ€ ๋˜๋Š” ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž.
    • BFS
      ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๊ฐ€ d๋ผ๋Š” ๋ง์€ d๋‹จ๊ณ„์˜ BFS๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋œป.
      ๋งจ ์ฒ˜์Œ์—” k๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ๊ทธ k๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ๋˜ ๊ฐ๊ฐ k๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•จ. ์ด๊ฒƒ์„ d๋ฒˆ ๋ฐ˜๋ณต.
      ์ฆ‰, ์ด O(k^d)๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ.
    • ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰
      s์™€ t์˜ ์ค‘๊ฐ„์ง€์ ๊นŒ์ง€ ๊ฐ๊ฐ์˜ BFS๊ฐ€ ์ง„ํ–‰๋  ๊ฒƒ. ๊ฐ BFS๊ฐ€ ๋Œ€๋žต d/2 ๋‹จ๊ณ„๋กœ ์ง„ํ–‰๋จ.
      ๊ทธ๋Ÿฌ๋ฉด ๊ฐ๊ฐ์˜ BFS์—์„œ ๋ฐฉ๋ฌธํ•˜๊ฒŒ ๋  ๋…ธ๋“œ๋Š” K^(d/2) ๊ฐœ์ด๊ณ , ๋‘๊ฐœ์˜ BFS๋ฅผ ํ•ฉ์ณ ์ด 2*K^(d/2) ์ฆ‰ O(K^(d/2))
  • ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ํ•œ์ •์ ์ด๋ผ๊ณ  ํ•˜๋ฉด(์‹œ์Šคํ…œ์˜ ์ž์›์ด ํ•œ์ •์ ์ด๋ผ๋ฉด), ์–‘๋ฐฉํ–ฅ ํƒ์ƒ‰์ด BFS๋ณด๋‹ค 2๋ฐฐ ๋” ๊ธด ๊ฒฝ๋กœ๊นŒ์ง€ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์–˜๊ธฐ.

๋ฉด์ ‘ ๋ฌธ์ œ

4.2 ๋ฐฐ์—ด์„ ์ž˜๋ผ์„œ ์ „๋‹ฌํ•˜์ง€ ๋ง๊ณ , ์›๋ณธ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ „๋‹ฌํ•˜๋ฉด์„œ ๊ณ„์‚ฐ

4.3 ์ด์ง„ํŠธ๋ฆฌ์—์„œ๋Š” '์ „์œ„ ์ˆœํšŒ(pre-order)'๊ฐ€ ๋‹จ๊ณ„๋ณ„ ์ˆœํšŒ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•จ

4.5 ์ด์ง„ํŠธ๋ฆฌ์˜ ์†์„ฑ์€ "ํ˜„์žฌ ๋…ธ๋“œ์—์„œ, ์™ผ์ชฝ์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ์˜ค๋ฅธ์ชฝ์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ํ˜„์žฌ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๋‹ค" ์ด๋‹ค. ์ฆ‰ ์„œ๋ธŒํŠธ๋ฆฌ๋“ค์˜ ์ตœ๋Œ€/์ตœ์†Œ ๋ฒ”์œ„๋กœ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

4.6 ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€,

  • ์˜ค๋ฅธ์ชฝ ์ž์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์˜ค๋ฅธ์ชฝ ์ž์‹์˜ ๊ฐ€์žฅ ์ขŒ์ธก ๋…ธ๋“œ.
  • ๋ถ€๋ชจ์˜ ์™ผ์ชฝ ์ž์‹์ด์—ˆ๋‹ค๋ฉด, ๋ถ€๋ชจ.
  • ๋ถ€๋ชจ์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹์ด์—ˆ๋‹ค๋ฉด, ๋ถ€๋ชจ์˜ ๋ถ€๋ชจ๋“ค ์ค‘ ๊ทธ๋“ค์„ ์™ผ์ชฝ ์ž์‹์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ.

4.7 ์œ„์ƒ์ •๋ ฌ (topological sort)
"์–ด๋–ค ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„  (a,b)๊ฐ€ a๋ฅผ ์œ„ํ•ด์„œ b๊ฐ€ ๋จผ์ € ์ถฉ์กฑ๋˜์–ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ, ๋…ธ๋“œ๋ฅผ ์„ ํ˜• ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๋ฐฉ๋ฒ•"

def topological_sort(nodes):
	stack = []
    for node in nodes:
    	if node.state == "BLANK":
        	if not complete_dfs(node, stack):
            	return False

    return stack[::-1]

def complete_dfs(node, stack):
	if node.state == "PARTIAL":
    	return False	# ์‚ฌ์ดํด ๊ฐ์ง€
  
    if node.state == "BLANK":
    	node.state = "PARTIAL"
	    for child in node.children:
    		if not complete_dfs(child, stack):
            	return False
        node.state = "COMPLETE"
        stack.append(node)

    return True

๊ฐœ๋…๊ณผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋น„ํŠธ ์กฐ์ž‘

๋น„ํŠธ ์กฐ์ž‘์„ ํ•  ๋•Œ ์•Œ์•„์•ผ ํ•  ์‚ฌ์‹ค๋“ค๊ณผ ํŠธ๋ฆญ๋“ค

  • ^(XOR) ์—ฐ์‚ฐ์€ ์—ฐ์‚ฐ์ž์™€ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋น„ํŠธ๊ฐ€ '๋‹ค๋ฅผ ๋•Œ' ์ฐธ์ด ๋œ๋‹ค.

  • ์–ด๋–ค ์ˆ˜๋ฅผ ์™ผ์ชฝ์œผ๋กœ n๋ฒˆ shift ํ•˜๋Š” ๊ฒƒ์€ 2^n ์„ ๊ณฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

  • ~0์„ ํ•˜๋ฉด ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 1์ด ๋œ๋‹ค.

  • -1๋„ ๋ชจ๋“  ๋น„ํŠธ๊ฐ€ 1์ด๋‹ค.

  • i ๋ฒˆ์งธ ๋น„ํŠธ๋งŒ 1์ธ ์ˆ˜์—์„œ 1์„ ๋นผ๋ฉด,
    ์ตœ์ƒ์œ„ ๋น„ํŠธ๋ถ€ํ„ฐ i ๋ฒˆ์งธ ๋น„ํŠธ๊นŒ์ง€๋Š” 0์ด ๋˜๊ณ , i-1 ๋ฒˆ์งธ ๋น„ํŠธ์™€ ๊ทธ ํ•˜์œ„ ๋น„ํŠธ๋“ค์ด ์ „๋ถ€ 1์ด ๋œ๋‹ค.

  • ์•Œ์•„๋‘๋ฉด ์ข‹์€ ํ‘œํ˜„์‹
    x ^ 0s = x
    x ^ 1s = ~x
    x ^ x = 0

2์˜ ๋ณด์ˆ˜์™€ ์Œ์ˆ˜

๋ณด์ˆ˜(่ฃœๆ•ธ)๋Š” ๋ณด์ถฉ์„ ํ•ด์ฃผ๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
์ด๋ฅผํ…Œ๋ฉด 1์— ๋Œ€ํ•œ 10์˜ ๋ณด์ˆ˜๋Š” 9, 4์— ๋Œ€ํ•œ 15์˜ ๋ณด์ˆ˜๋Š” 11์˜ ๊ฐœ๋…์ด๋‹ค. 1์— ๋Œ€ํ•œ 2์˜ ๋ณด์ˆ˜๋Š” 1์ด๋‹ค.

์ž๋ฆฟ์ˆ˜๊ฐ€ 8๊ฐœ(8๋น„ํŠธ) ์ผ ๊ฒฝ์šฐ ์Œ์˜ ์ •์ˆ˜ -6์„ ์•„๋ž˜์™€ ๊ฐ™์ด 1์˜ ๋ณด์ˆ˜ ๋ฐฉ์‹๊ณผ 2์˜ ๋ณด์ˆ˜ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฆฌ์ˆ˜๊ฐ€ 8๊ฐœ(8๋น„ํŠธ) ์ผ ๊ฒฝ์šฐ, ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 256๊ฐ€์ง€ ์ด๊ณ , 0์„ ํฌํ•จํ•œ๋‹ค๋ฉด 0๋ถ€ํ„ฐ 255๊นŒ์ง€์˜ ์ •์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Œ์ˆ˜๋ž€ ๋ฌด์—‡์ธ๊ฐ€? ๊ทธ ์ ˆ๋Œ€๊ฐ’(์–‘์ˆ˜)๊ณผ ์ž๊ธฐ์ž์‹ (์Œ์ˆ˜)์„ ๋”ํ•˜๋ฉด 0 ์ด ๋˜๋Š” ์ˆ˜์ด๋‹ค.
์ฆ‰ ์–ด๋–ค ์–‘์ˆ˜์— "์–ด๋–ค ์ˆ˜" ๋ฅผ ๋”ํ•ด์„œ 0์ด ๋‚˜์˜จ๋‹ค๋ฉด, ๊ทธ "์–ด๋–ค ์ˆ˜"๋Š” ์Œ์ˆ˜์ผ ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ์ž๋ฆฌ์ˆ˜(8๊ฐœ)๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋‹ค๋ฉด, ์–ด๋–ค ์–‘์ˆ˜์— "์–ด๋–ค ์ˆ˜"๋ฅผ ๋”ํ•ด์„œ 256์ด ๋˜์–ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค. 256์€ 9๋ฒˆ์งธ ์ž๋ฆฌ๋งŒ 1์ด๊ณ  ๋‚˜๋จธ์ง€ 8๊ฐœ ์ž๋ฆฌ๋Š” ์ „๋ถ€ 0์ด๊ธฐ ๋•Œ๋ฌธ์—, 8๊ฐœ์˜ ์ž๋ฆฌ์ˆ˜๊ฐ€ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์— ์ˆ˜์—์„œ๋Š” 0์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋•Œ ์•„๊นŒ 8๊ฐœ์˜ ์ž๋ฆฌ์ˆ˜์—์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ์ •์ˆ˜๋Š” 255๋ผ๊ณ  ํ–ˆ๋‹ค. 8์ž๋ฆฌ์—์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ์ •์ˆ˜๋Š” ๋‹น์—ฐํ•˜๊ฒŒ๋„ 8๊ฐœ ์ž๋ฆฌ ๋ชจ๋‘ 1์ด๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ 1์„ ๋”ํ•˜๋ฉด 256์ด ๋œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋–ค ์–‘์ˆ˜์— "์–ด๋–ค ์ˆ˜"๋ฅผ ๋”ํ•ด 255๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉด, "์–ด๋–ค ์ˆ˜" + 1 ๋กœ๋Š” 256์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
์ฆ‰ "์–ด๋–ค ์ˆ˜" + 1 ์ด ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋˜ ์Œ์ˆ˜๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿผ ์ผ๋‹จ 255๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž. 255์—์„œ ์–‘์ˆ˜๋ฅผ ๋นผ๋ฉด "์–ด๋–ค ์ˆ˜"๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
255 ์ฆ‰, 8๊ฐœ ์ž๋ฆฌ ๋ชจ๋‘ 1์ธ ์ด์ง„์ˆ˜์—์„œ ์–‘์ˆ˜๋ฅผ ๋นผ๋ฉด ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ง์ ‘ ํ•ด๋ณด๋ฉด ์›๋ž˜ ์–‘์ˆ˜์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚จ ๊ฒฐ๊ณผ์™€ ๊ฐ™์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ตญ ์–‘์ˆ˜์˜ ๋น„ํŠธ๋ฅผ ๋ชจ๋‘ ๋ฐ˜์ „์‹œํ‚ค๊ณ , 1์„ ๋”ํ•œ ๊ฒƒ์ด "์–ด๋–ค ์ˆ˜" + 1 ์ฆ‰ ์Œ์ˆ˜๊ฐ€ ๋œ๋‹ค.
์—ฌ๊ธฐ์„œ "์–ด๋–ค ์ˆ˜" ๊ฐ€ 1์˜ ๋ณด์ˆ˜, "์–ด๋–ค ์ˆ˜" + 1์ด 2์˜ ๋ณด์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด์ง„์ˆ˜๋Š” ํ•˜ํ•„์ด๋ฉด ํ•œ ์ž๋ฆฌ์— '๋‘ ๊ฐ€์ง€'์˜ ์ˆซ์ž๋งŒ ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, '๋‘ ๊ฐ€์ง€' ๋กœ ํ‘œํ˜„๋˜๋Š” ์Œ/์–‘ ๋ถ€ํ˜ธ๋ฅผ ์ˆ˜ ํ‘œํ˜„์œผ๋กœ ๋Œ€์‹  ์‚ฌ์šฉํ•œ๋‹ค.
๊ตฌ์ฒด์ ์œผ๋กœ๋Š”, ๊ฐ€์žฅ ์ƒ์œ„ ์ž๋ฆฌ์˜ 1 / 0์ด ์Œ / ์–‘์„ ํ‘œํ˜„ํ•œ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ž๋ฆฌ 1๊ฐœ๊ฐ€ ์ค„์—ˆ์œผ๋ฏ€๋กœ, ํ‘œํ˜„ ๊ฐ€๋Šฅํ•œ ์ •์ˆ˜์˜ ๋ฒ”์œ„๋„ ~128 ~ 0 ~ 127 ๋กœ ๋ฐ”๋€๋‹ค. ๋‹จ, ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์—ฌ์ „ํžˆ ๊ฐ™๋‹ค.

์šฐ์ธก ์‹œํ”„ํŠธ

์šฐ์ธก ์‹œํ”„ํŠธ๋Š” ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ ํ•ญ์ƒ ๋นˆ๊ณต๊ฐ„์ด ๋˜๋Š”๋ฐ ํ•˜ํ•„ ์ด๊ฒŒ ๋ถ€ํ˜ธ๋น„ํŠธ์ด๋‹ค.
๊ทธ๋ž˜์„œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์‚ฐ์ˆ  : ๊ธฐ์กด ๋ถ€ํ˜ธ๋น„ํŠธ๋ฅผ ๊ทธ๋Œ€๋กœ ๋นˆ๊ณต๊ฐ„์— ๋„ฃ์Œ (>>)
  • ๋…ผ๋ฆฌ : ๋นˆ๊ณต๊ฐ„์— 0์„ ๋„ฃ์Œ. (>>>)

๊ธฐ๋ณธ์ ์ธ ๋น„ํŠธ ์กฐ์ž‘

[๋น„ํŠธ๊ฐ’ ํ™•์ธ] -> ์ผœ์ ธ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ

  • 1์„ ์‹œํ”„ํŠธํ•ด์„œ ์›ํ•˜๋Š” ๋น„ํŠธ ์œ„์น˜๋งŒ 1์ด ๋˜๋„๋ก ํ•œ ํ›„์—
  • &์—ฐ์‚ฐ์ด ์ฐธ์ธ์ง€ ํ™•์ธ

[๋น„ํŠธ๊ฐ’ ์ฑ„์›Œ๋„ฃ๊ธฐ] -> ํ•ด๋‹น ๋น„ํŠธ 1๋กœ ๋งŒ๋“ค๊ธฐ

  • 1์„ ์‹œํ”„ํŠธํ•ด์„œ ์›ํ•˜๋Š” ๋น„ํŠธ ์œ„์น˜๋งŒ 1๋กœ ๋งŒ๋“ค๊ณ  ~์—ฐ์‚ฐ์„ ๊ทธ ์œ„์น˜๋งŒ 0์ด ๋˜๋„๋ก ํ•œ ํ›„์—
  • &์—ฐ์‚ฐ์ด ์ฐธ์ธ์ง€ ํ™•์ธ

[๋น„ํŠธ๊ฐ’ ์‚ญ์ œํ•˜๊ธฐ] -> ํ•ด๋‹น ๋น„ํŠธ(๋“ค) 0์œผ๋กœ ๋งŒ๋“ค๊ธฐ

  • ์›ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ 0์œผ๋กœ ์„ธํŒ…ํ•œ mask๋ฅผ ๋งŒ๋“ค๊ณ  &์—ฐ์‚ฐ.

[๋น„ํŠธ๊ฐ’ ๋ฐ”๊พธ๊ธฐ] -> 0๋˜๋Š” 1๋กœ ๋ฐ”๊พธ๊ธฐ

  1. ์›ํ•˜๋Š” ๋ฒ”์œ„๋ฅผ 0์œผ๋กœ ๋ฐ”๊พผ ํ›„์—
  2. OR ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๋น„ํŠธ๋ฅผ ๋„ฃ์–ด์คŒ

๋ฉด์ ‘ ๋ฌธ์ œ

5.6 ์–ด๋–ค ์ •์ˆ˜ a์˜ '1๋น„ํŠธ'์˜ ๊ฐœ์ˆ˜๋ฅผ ์„ผ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ,

  • ํ•œ ์นธ์”ฉ ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ ํ•˜๋ฉฐ, ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๊ฒ€์‚ฌ
def check(a):	# a๋Š” ์–‘์ˆ˜๋ผ๊ณ  ํ•˜์ž. ์Œ์ˆ˜์ด๋ฉด ๋…ผ๋ฆฌ ์‹œํ”„ํŠธ๋ฅผ ์จ์•ผํ•œ๋‹ค.
	count = 0
	while a != 0:
    	count += a & 1
        a >> 1
   
    return count
  • ์ตœํ•˜์œ„ ๋น„ํŠธ๋ฅผ ๋’ค์ง‘์–ด ๊ฐ€๋ฉฐ, a๊ฐ€ 0์ด ๋˜๋Š”๋ฐ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š” ์ง€๋ฅผ ๊ณ„์‚ฐ.
    ๋‹ค์‹œ ๋งํ•ด, a๊ฐ€ 0์ด ๋  ๋•Œ ๊นŒ์ง€ a = a & (a - 1) ์„ ๋ฐ˜๋ณต
    • ์ตœํ•˜์œ„ ๋น„ํŠธ๊ฐ€ 1์ด๋ฉด,
      -1 ํ–ˆ์„ ๋•Œ ์ตœํ•˜์œ„ ๋น„ํŠธ๋Š” 0์ด ๋˜๊ณ , ๊ธฐ์กด ๊ฐ’๊ณผ & ํ•˜๋ฉด ๊ธฐ์กด๊ฐ’์˜ ๊ทธ 1์ด ์‚ฌ๋ผ์ง.
    • ์ตœํ•˜์œ„ ๋น„ํŠธ๊ฐ€ 0์ด๋ฉด,
      -1 ํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” 1์ด 0์ด ๋˜๊ณ , ๊ทธ ํ•˜์œ„ ๋น„ํŠธ๋“ค์€ ์ „๋ถ€ 1์ด ๋จ. ๊ทธ๋ฆฌ๊ณ  & ํ•˜๋ฉด ๊ธฐ์กด๊ฐ’์˜ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋˜ 1๋งŒ ์‚ฌ๋ผ์ง.
      ์™œ๋ƒํ•˜๋ฉด, ๊ทธ ํ•˜์œ„ ๋น„ํŠธ๋Š” ์ „๋ถ€ 0์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ.
def check(a)
	count = 0
	while a != 0:
    	a = a & (a - 1)

    return count

5.7 ํ™€์ˆ˜ ๋น„ํŠธ๋ฅผ ๋งˆ์Šคํ‚นํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋ฅผ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค๊นŒ?
16์ง„์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„ํŠธ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ธฐ ํŽธํ•˜๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด, 10101010(2) ๋Š” 0xAA ์ด๋‹ค. 01010101(2) ๋Š” 0x55 ์ด๋‹ค. 11111111(2) ๋Š” 0xFF ์ด๋‹ค.
16์ง„์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•œ ์ž๋ฆฌ์ˆ˜์— 4๋น„ํŠธ์”ฉ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ 4๋น„ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ์ˆซ์ž๋ฅผ ์ž๋ฆฟ์ˆ˜๋ณ„๋กœ ์ญ‰ ๋‚˜์—ดํ•˜๋ฉด ๋œ๋‹ค.

์ˆ˜ํ•™ ๋ฐ ๋…ผ๋ฆฌ ํผ์ฆ

์ˆ˜์ˆ˜๊ป˜๋ผ (brain teasers) ํ˜น์€ ํผ์ฆ.
๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ๋งŽ์ง€๋งŒ ์–ด์จŒ๋“  ์ถœ์ œ๋  ์ˆ˜ ์žˆ์Œ.

์†Œ์ˆ˜

๋ชจ๋“  ์ž์—ฐ์ˆ˜๋Š” ์†Œ์ˆ˜์˜ ๊ณฑ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

[๊ฐ€๋ถ„์„ฑ]
x๋ฅผ y๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด, y๋ฅผ ์ด๋ฃจ๋Š” ์†Œ์ˆ˜๋“ค์€ x๋ฅผ ์ด๋ฃจ๋Š” ์†Œ์ˆ˜๋“ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์ด์–ด์•ผ ํ•œ๋‹ค.

x=2j0โˆ—3j1โˆ—5j2โˆ—7j3โˆ—11j4โˆ—โ€ฆx = 2^{j0} * 3^{j1} * 5^{j2} * 7^{j3} * 11^{j4} * \ldots
y=2k0โˆ—3k1โˆ—5k2โˆ—7k3โˆ—11k4โˆ—โ€ฆy = 2^{k0} * 3^{k1} * 5^{k2} * 7^{k3} * 11^{k4} * \ldots

์—ฌ๊ธฐ์„œ ji<=kij_i <= k_i ๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋œป.

๊ทธ๋ž˜์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ๊ฐ ์ง€์ˆ˜๋“ค์˜ ์ตœ์†Œ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ๊ณ  (ํ•œ์ชฝ์ด๋ผ๋„ 0์ด๋ฉด 0์ด ๋  ์ˆ˜ ์žˆ์Œ),

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜:gcd(x,y)=2minโก(j0,k0)โˆ—3minโก(j1,k1)โˆ—5minโก(j2,k2)โˆ—โ€ฆ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜: gcd(x, y) = 2^{\min(j_0, k_0)} * 3^{\min(j_1, k_1)} * 5^{\min(j_2, k_2)} * \ldots

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ๊ฐ ์ง€์ˆ˜๋“ค ์ค‘ ํฐ๊ฐ’์„ ์ทจํ•œ๋‹ค.
๊ฐ๊ฐ์˜ ๋ฐฐ์ˆ˜์ค‘์— ๊ฐ€์žฅ ์ฒ˜์Œ์œผ๋กœ ๊ฐ™์€ ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ํฐ ์ง€์ˆ˜์™€ ์ž‘์€ ์ง€์ˆ˜์˜ ์ฐจ์ด๋งŒํผ ์ž‘์€ ์ง€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ˆ˜์—์„œ ๋ฐฐ์ˆ˜(๊ณฑํ•ด์ง)์ด ๋˜๋Š” ์›๋ฆฌ.

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜:lcm(x,y)=2maxโก(j0,k0)โˆ—3maxโก(j1,k1)โˆ—5maxโก(j2,k2)โˆ—โ€ฆ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜: lcm(x, y) = 2^{\max(j_0, k_0)} * 3^{\max(j_1, k_1)} * 5^{\max(j_2, k_2)} * \ldots

๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋‘˜์„ ๊ณฑํ•œ ๊ฒฐ๊ณผ๋Š” ๊ณต๊ต๋กญ๊ฒŒ๋„ xโˆ—yx*y ์™€ ๊ฐ™๋‹ค.

gcdโˆ—lcm=2minโก(j0,k0)+maxโก(j0,k0)โˆ—3minโก(j1,k1)+maxโก(j1,k1)โˆ—โ€ฆ=2j0+k0โˆ—3j1+k1โˆ—โ€ฆ=xโˆ—ygcd * lcm = 2^{\min(j_0, k_0) + \max(j_0, k_0)} * 3^{\min(j_1, k_1) + \max(j_1, k_1)} * \ldots \\ = 2^{j_0 + k_0} * 3^{j_1 + k_1} * \ldots = x * y

[์†Œ์ˆ˜ ํŒ๋ณ„ (์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด)]

  • ์–ด๋–ค ์ˆ˜ n์ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ์‹์€, 2๋ถ€ํ„ฐ n-1 ๊นŒ์ง€ ๋Œ๋ฉด์„œ n์ด ๋‚˜๋‰˜์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ.

  • ์ข€๋” ๋˜‘๋˜‘ํ•˜๊ฒŒ๋Š”, n\sqrt{n} ๊นŒ์ง€๋งŒ ๋Œ๋ฉด์„œ n์ด ๋‚˜๋‰˜์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ.
    ๊ทธ ์ด์ƒ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ด๋ฏธ ๊ทธ ์ด์ „์—์„œ ํ™•์ธ์ด ๋˜์–ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ.

  • ์ด๊ฒƒ๋ณด๋‹ค ๋” ๋˜‘๋˜‘ํ•œ ์‚ฌ๋žŒ -> ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค.

    • "์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆ˜๋“ค์€ ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ์†Œ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด์ง„๋‹ค."

    • 1๋ถ€ํ„ฐ max๊นŒ์ง€ ์ˆ˜๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ,
      2๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์ „๋ถ€ ์ง€์šฐ๊ณ , 3์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์ „๋ถ€ ์ง€์šฐ๊ณ , 5๋กœ, 7๋กœ , ... .

    • ๋‹จ, ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์ง€์šธ ๋•Œ, ์ž๊ธฐ ์ž์‹ ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ๋‚ฎ์€ ๋ฐฐ์ˆ˜๋ฅผ ์ ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.
      ์ด๋ฏธ ์ด์ „ ์†Œ์ˆ˜์—์„œ ํ˜„์žฌ์˜ ์ž๊ธฐ์ž์‹ ์ด ๋ฐฐ์ˆ˜๋กœ ์‚ฌ์šฉ๋˜์—ˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—.

      def sieve_of_eratosthenes(int max):
          flags = [True for _ in range(max+1)]	# inclusive
          count = 0
      
          flags[0] = flags[1] = False
          prime = 2
      
          while prime <= math.sqrt(max):	# ์šฐ๋ฆฌ๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ณ  ์‹ถ์€ ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋Š” max.
              cross_off(flags, prime)
              prime = get_next_prime(flags, prime)	# ๋ฐ”๋กœ ๋‹ค์Œ์— ์žˆ๋Š” True ํ”Œ๋ž˜๊ทธ ์ฐพ๊ธฐ
      
          return flags
      
      def cross_off(flags, prime):
          i = prime	# ์ด์ „ ์†Œ์ˆ˜์—์„œ ์ด๋ฏธ ์ง€์›Œ์ง„ ๊ฐ’๋“ค์€ ๊ฑด๋„ˆ ๋œ€. ์ฆ‰, 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š์Œ.
          x = i * prime
      
          while x < len(flags):
              flags[x] = False
              x += prime
    • ๋ฆฌ์ŠคํŠธ์— ํ™€์ˆ˜๋งŒ ๋„ฃ์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ ˆ๋ฐ˜.

ํ™•๋ฅ 

๐Ÿ‘‰ ๋‹คํŠธ๋ฅผ ๋˜์กŒ์„ ๋•Œ, ๋‘ ์›์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐˆ ํ™•๋ฅ .

  1. A์— ๋–จ์–ด์งˆ ํ™•๋ฅ 
  2. A์—์„œ A์™€B๊ฐ€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์˜ ๋น„์œจ

๋‘˜์„ ๊ณฑํ•˜๋ฉด, ๋‘ ์›์˜ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐˆ ํ™•๋ฅ ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

P(AโˆฉB)=P(BโˆฃA)โ‹…P(A)P(A \cap B) = P(B|A) \cdot P(A)

์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ˆ˜์—์„œ ํ•˜๋‚˜๋ฅผ ๋ฝ‘๋Š”๋‹ค๊ณ  ํ•  ๋•Œ, 5๋ณด๋‹ค ์ž‘์œผ๋ฉด์„œ ์ง์ˆ˜๋ฅผ ๋ฝ‘์„ ํ™•๋ฅ ์€
5๋ณด๋‹ค ์ž‘์€ ์ˆ˜๋ฅผ ๋ฝ‘์„ ํ™•๋ฅ ๊ณผ, 5๋ณด๋‹ค ์ž‘์œผ๋ฉด์„œ ์ง์ˆ˜๋ฅผ ๋ฝ‘์„ ํ™•๋ฅ ์„ ๊ณฑํ•ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

P(AโˆฉB)=(2/5)โˆ—(1/2)=1/5P(A \cap B) = (2/5) * (1/2) = 1/5

ํ•œํŽธ,

P(AโˆฉB)=P(BโˆฃA)โ‹…P(A)=P(AโˆฃB)โ‹…P(B)P(A \cap B) = P(B|A) \cdot P(A) = P(A|B) \cdot P(B)

๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, B์— ์†ํ•˜๋ฉด์„œ A์—๋„ ์†ํ•  ํ™•๋ฅ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

P(AโˆฃB)=P(BโˆฃA)โ‹…P(A)P(B)P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}

์ด๋ฅผ ๋ฒ ์ด์ฆˆ ์ •๋ฆฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๐Ÿ‘‰ ๋‹คํŠธ๋ฅผ ๋˜์กŒ์„ ๋•Œ, ๋‘ ์› ์ค‘์—์„œ ํ•˜๋‚˜์— ๋–จ์–ด์งˆ ํ™•๋ฅ .

P(AโˆชB)=P(A)+P(B)โˆ’P(AโˆฉB)P(A \cup B) = P(A)+P(B)-P(A \cap B)

๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ๋‘๋ฒˆ ๊ณ„์‚ฐ๋˜๋ฏ€๋กœ ํ•œ ๋ฒˆ์€ ๋นผ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ถ€ํ„ฐ 10๊นŒ์ง€ ์ˆ˜์—์„œ ํ•˜๋‚˜๋ฅผ ๋ฝ‘๋Š”๋‹ค๊ณ  ํ•  ๋•Œ, ์ง์ˆ˜๋ฅผ ๋ฝ‘๊ฑฐ๋‚˜ 1~5 ์ค‘์—์„œ ๋ฝ‘์„ ํ™•๋ฅ ์€
์ง์ˆ˜๋ฅผ ๋ฝ‘์„ ํ™•๋ฅ ๊ณผ 1~5 ์ค‘์—์„œ ๋ฝ‘์„ ํ™•๋ฅ ์„ ๋”ํ•˜๊ณ , ์ง์ˆ˜์ด๋ฉด์„œ 1~5 ์ค‘์—์„œ ๋ฝ‘์„ ํ™•๋ฅ ์„ ํ•œ ๋ฒˆ ๋นผ์ฃผ๋ฉด ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

P(AโˆชB)=(1/2)+(1/2)โˆ’(1/5)=4/5P(A \cup B) = (1/2) + (1/2) - (1/5) = 4/5

๐Ÿ‘‰ ๋…๋ฆฝ ์‚ฌ๊ฑด
ํ•œ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๊ฑด์— ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ.

P(AโˆฃB)=P(A)P(A|B) = P(A)\\
P(AโˆฉB)=P(AโˆฃB)โ‹…P(B)=P(A)โ‹…P(B)P(A \cap B) = P(A|B) \cdot P(B) = P(A) \cdot P(B)

๐Ÿ‘‰ ์ƒํ˜ธ ๋ฐฐํƒ€์„ฑ (๋ฐฐ๋ฐ˜ ์‚ฌ๊ฑด)
ํ•œ ์‚ฌ๊ฑด์ด ์ผ์–ด๋‚œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์‚ฌ๊ฑด์€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ.

P(AโˆฉB)=0P(A \cap B) = 0
P(AโˆชB)=P(A)+P(B)P(A \cup B) = P(A) + P(B)

๋‘˜์€ ๋™์‹œ์— ๋งŒ์กฑํ•  ์ˆ˜ ์—†์Œ.
์™œ๋ƒํ•˜๋ฉด ๋…๋ฆฝ ์‚ฌ๊ฑด์€ ํ•œ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ ์—ฌ๋ถ€๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๊ฑด์— ์˜ํ–ฅ์„ ๋ผ์น˜๋ฉด ์•ˆ๋˜๋Š”๋ฐ, ์ƒํ˜ธ ๋ฐฐํƒ€์„ฑ์€ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ๊ฒฝ์šฐ(์ผ์–ด๋‚˜๋ฉด ์•ˆ๋จ)์ด๊ธฐ ๋•Œ๋ฌธ. ๋‹จ, ๋‘ ์‚ฌ๊ฑด ์ค‘ ํ•˜๋‚˜์˜ ํ™•๋ฅ ์ด๋ผ๋„ 0์ด๋ฉด ๊ฐ€๋Šฅ.

๋‚˜๋ฆ„์˜ ์š”๋ น

  • ์ž…์„ ์—ด๋ผ
    • ์‚ฌ๊ณ ์˜ ๊ณผ์ •์„ ๋ง๋กœ ํ‘œํ˜„ํ•ด๋ณด์ž.
  • ๊ทœ์น™๊ณผ ํŒจํ„ด์„ ์ฐพ์œผ๋ผ
  • ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์ตœ์†Œํ™” ํ•˜๋ผ
    • ์ดˆ๊ธฐ์— ์–ด๋–ค ๊ฒฐ์ •์„ ํ†ตํ•ด ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๋ฆฌ๋ฉด, ๊ทธ ๊ฒฐ์ •์„ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ '๊ท ํ˜• ์žกํžˆ๋„๋ก' ํ•˜๋Š” ์‹.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ ‘๊ทผ ๋ฒ•
    • ์ดˆ๊ธฐ์‚ฌ๋ก€ (base case)๋กœ๋ถ€ํ„ฐ์˜ ํ™•์žฅ, ์‹ค์ œ ์†์œผ๋กœ ํ’€์–ด๋ณด๊ธฐ (DIY) ๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

[๋ฉด์ ‘ ๋ฌธ์ œ]

6.6 ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ๋˜‘๋˜‘ํ•˜๊ณ , ์ž์‹ ์˜ ๋ˆˆ๋™์ž๊ฐ€ ํ‘ธ๋ฅด๋‹ค๋Š”๊ฑธ ์•Œ๋ฉด ๊ทธ๋‚  ๋– ๋‚  ๊ฒƒ์ด๋ผ๋Š” ๊ฐ€์ •์ด ์žˆ์Œ.

6.7 ์ •ํ•ด์ง„ ๊ฐ€์กฑ์˜ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๊ฑฐ์˜ ๋ฌดํ•œํ•œ ๊ฐœ์ˆ˜์˜ ๊ฐ€์กฑ๋“ค์ด ์žˆ๋‹ค๊ณ  ๋ณด๋ฉด ๋จ.

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„

  • ๊ธฐ์ˆ ์  ๋ฌธ์ œ / ์‹ค์ƒํ™œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ํด๋ž˜์Šค / ๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„
  • ๋””์ž์ธ ํŒจํ„ด๋ณด๋‹ค๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ์ ('์šฐ์•„'ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๊ฐ€๋Šฅํ•œ) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”์ง€๋ฅผ ์ค‘์ ์ ์œผ๋กœ ํ‰๊ฐ€

์ ‘๊ทผ๋ฒ•

  1. ๋ชจํ˜ธ์„ฑ ํ•ด์†Œ: ์งˆ๋ฌธ ๋˜์ง€๊ธฐ

    • ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๊ด€๋ จ ๋ฌธ์ œ๋“ค์€ ๋Œ€๋ถ€๋ถ„ ๊ณ ์˜์ ์œผ๋กœ ๋ชจํ˜ธ์„ฑ์„ ๋„๊ณ ์žˆ์Œ.
      -> ์Šค์Šค๋กœ ๊ฐ€์ •์„ ๋งŒ๋“ค์–ด๋‚ด๊ณ , ์งˆ๋ฌธ์„ ํ†ตํ•ด ๋ช…ํ™•ํžˆ ํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์„ ํ‰๊ฐ€ํ•˜๊ณ ์ž ํ•˜๊ธฐ ๋•Œ๋ฌธ
    • ์งˆ๋ฌธ์„ ํ•ด์•ผํ•จ.
      e.g. ์ปคํ”ผ๋ฉ”์ด์ปค์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„. ๋Œ€๊ทœ๋ชจ ์นดํŽ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ธ๊ฐ€, ์ปดํŒฉํŠธํ•œ ๊ฐ€์ •์šฉ์ธ๊ฐ€?
  2. ํ•ต์‹ฌ ๊ฐ์ฒด์˜ ์„ค๊ณ„

    • ์‹œ์Šคํ…œ์— ๋“ค์–ด๊ฐˆ 'ํ•ต์‹ฌ ๊ฐ์ฒด(core object)'๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.
    • e.g. ์‹๋‹น์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์  ์„ค๊ณ„
      Table, Guest, Party, Order, Meal, Employee, Server, Host
  3. ๊ด€๊ณ„ ๋ถ„์„

    • ํ•ต์‹ฌ ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ๊ด€๊ณ„ ๋ถ„์„
    • ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ member์ธ์ง€, ์ƒ์†(inherit)๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š”์ง€, many-to-many ์ธ์ง€ one-to-many ์ธ์ง€.
    • e.g. ์‹๋‹น์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์  ์„ค๊ณ„
      • Party ๋Š” Guests ๋ฐฐ์—ด์„ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
      • Server ์™€ Host๋Š” Employee๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.
      • Party๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ Table์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, Table์€ ํ•˜๋‚˜์˜ Party๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  4. ํ–‰๋™ ๋ถ„์„

    • ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ํ•ต์‹ฌ ํ–‰๋™(core action)์ด ๋ฌด์—‡์ผ์ง€๋ฅผ ์ƒ๊ฐํ•ด๋ณธ๋‹ค.
    • e.g. ์‹๋‹น์— ๋Œ€ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ์  ์„ค๊ณ„
      ํ•œ Party๊ฐ€ ์‹๋‹น์œผ๋กœ ์ž…์žฅํ•˜๊ณ , ํ•œ Guest๊ฐ€ Host์—๊ฒŒ Table์„ ๋ถ€ํƒํ•œ๋‹ค.
      Host๋Š” Reservation์„ ์‚ดํŽด๋ณด๊ณ , ๋‚จ์€ ์ž๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด ํ•ด๋‹น Party์—๊ฒŒ ๊ทธ Table์„ ๋ฐฐ์ •ํ•  ๊ฒƒ.
      ๋‚จ์€ ์ž๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด, Reservation ๋Œ€๊ธฐ ๋ฆฌ์ŠคํŠธ ๋งˆ์ง€๋ง‰์— ํ•ด๋‹น Party๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒƒ.
      ๋‹ค๋ฅธ Party๊ฐ€ ์‹์‚ฌ๋ฅผ ๋งˆ์น˜๊ณ  ๋– ๋‚˜๋ฉด, Reservation ๋Œ€๊ธฐ ๋ฆฌ์ŠคํŠธ์— ๋งจ ์•ž์— ์žˆ๋Š” Party์—๊ฒŒ ์ž๋ฆฌ๊ฐ€ ๋‚œ Table์„ ๋ฐฐ์ •ํ•  ๊ฒƒ.

๋””์ž์ธ ํŒจํ„ด

  • ๋ณดํ†ต ๋ฉด์ ‘ ๋ฒ”์œ„ ๋ฐ–์ด์ง€๋งŒ, ์•Œ์•„๋‘๋ฉด ์ข‹์€ ํŒจํ„ด๋“ค์ด ์žˆ์Œ.
  • ๋””์ž์ธ ํŒจํ„ด์— ๊ด€ํ•œ ์ฑ…์„ ํ•˜๋‚˜ ๊ณจ๋ผ์„œ ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•.
  • ๋‹จ, ํŠน์ • ๋ฌธ์ œ์— '๊ฐ€์žฅ ์ ํ•ฉํ•œ' ๋””์ž์ธ ํŒจํ„ด์„ '๊ณจ๋ผ์•ผ'ํ•œ๋‹ค๋Š” ํ•จ์ •์— ๋น ์ง€์ง„ ๋ง๊ธธ.
    ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํŒจํ„ด์ด ์ ํ•ฉํ•œ ๊ฒฝ์šฐ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ด๊ณ  ๋ณดํ†ต์€ ์ง์ ‘ ๋งŒ๋“ค์–ด์„œ ์จ์•ผํ•œ๋‹ค.
  1. ์‹ฑ๊ธ€ํ†ค(singleton)
    ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์˜ค์ง ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋งŒ์„ ๊ฐ–๋„๋กํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ค์ง ๊ทธ ๊ฐ์ฒด๋งŒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅ.

  2. ํŒฉํ† ๋ฆฌ ํŒจํ„ด(factory pattern)
    ์–ด๋–ค ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋˜, ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ• ์ง€๋ฅผ ํ•˜์œ„ ํด๋ž˜์Šค์—์„œ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์คŒ.

    • ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ ํŒจํ„ด :
      ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค(ํŒฉํ† ๋ฆฌ ๋ฉ”์†Œ๋“œ)๋ฅผ ์ง์ ‘์ ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ํด๋ž˜์Šค(ํŒฉํ† ๋ฆฌ)๋ฅผ ๋งŒ๋“ ๋‹ค.
    • ์ถ”์ƒ ํŒฉํ† ๋ฆฌ ํŒจํ„ด :
      ์—ฌ๋Ÿฌ ํŒฉํ† ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋ , ์ƒ์œ„์˜ ์ถ”์ƒ(abstract) ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฆ‰ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋“ค์„ ์ถ”์ƒํ™”ํ•œ ์ƒ์œ„์˜ ํŒฉํ† ๋ฆฌ ํด๋ž˜์Šค๋ฅผ abstract๋กœ ์„ ์–ธํ•œ๋‹ค.

์žฌ๊ท€์™€ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์žฌ๊ท€์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ์˜ ํŒจํ„ด

  • ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ์ž‘์€ ํฌ๊ธฐ์˜ ๋ฌธ์ œ๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฐ€?
    • "n๋ฒˆ์งธ ... ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ค๊ณ„ํ•˜๋ผ"
    • "์ฒซ n๊ฐœ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ผ"
    • "๋ชจ๋“  ...๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ"

์ ‘๊ทผ๋ฒ•

์žฌ๊ท€์  ํ•ด๋ฒ•์€, ๋ถ€๋ถ„ ๋ฌธ์ œ(subproblem)์— ๋Œ€ํ•œ ํ•ด๋ฒ•์„ ํ†ตํ•ด ์™„์„ฑ๋œ๋‹ค.

  • f(n-1)์— ๋Œ€ํ•œ ํ•ด๋‹ต์— ๋”ํ•˜๊ฑฐ๋‚˜/์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜/๋ณ€๊ฒฝํ•˜์—ฌ f(n)์„ ๊ณ„์‚ฐํ•ด๋‚ธ๋‹ค.
  • ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ  ๊ฐ๊ฐ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์ด๋“ค์„ ๋ณ‘ํ•ฉ(merge)ํ•˜๊ธฐ๋„ ํ•จ.

๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์žฅ ํ”ํ•œ ์„ธ๊ฐ€์ง€.

[bottom-up]
๊ฐ€์žฅ ์ง๊ด€์ . ์ฃผ๋กœ ์ˆœํ™˜์ ์ธ ๊ตฌํ˜„.
๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋“ค์— ๋Œ€ํ•œ ํ’€์ด๋ฒ•์„ ๋ฐœ๊ฒฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘.
์ด์ „์— ํ’€์—ˆ๋˜ ์‚ฌ๋ก€๋ฅผ ํ™•์žฅํ•˜์—ฌ ๋‹ค์Œ ํ’€์ด๋ฅผ ์ฐพ๋Š”๋‹ค.

[top-down]
๋œ ๋ช…ํ™•ํ•ด์„œ ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜๋„. ์ฃผ๋กœ ์žฌ๊ท€์ ์ธ ๊ตฌํ˜„.
์–ด๋–ป๊ฒŒ ํ•˜๋ฉด N์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์„์ง€ ์ƒ๊ฐ.
๋‚˜๋‰œ ๋ถ€๋ถ„๋ฌธ์ œ์˜ ๊ฒฝ์šฐ๊ฐ€ ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•ด์•ผ.

[half-and-half]
์ด์ง„ํƒ์ƒ‰์ด๋‚˜ ๋ณ‘ํ•ฉ์ •๋ ฌ์ด ์‚ฌ์šฉํ•˜๋Š” ์ ‘๊ทผ๋ฒ•.

recursive vs. iterative

์žฌ๊ท€์  ํ•ด๋ฒ•(recursive)์€ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ์ด ๋‚˜์จ.
์žฌ๊ท€์˜ ๊นŠ์ด๊ฐ€ n์ผ ๋•Œ, O(n)๋งŒํผ์˜ ๊ณต๊ฐ„์„ ์Šคํƒ์—์„œ ์“ฐ๊ฒŒ๋จ.

๋ชจ๋“  ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆœํ™˜์ (iterative)์œผ๋กœ ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ์Œ.
์ˆœํ™˜์ ์ธ ๊ตฌํ˜„์€ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ์ด ๋” ์ข‹์ง€๋งŒ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ.

๋™์ ๊ณ„ํš๋ฒ• & ๋ฉ”๋ชจ์ด์ œ์ด์…˜

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ฌด์„œ์›Œํ•˜์ง€๋งŒ, ํ•œ ๋ฒˆ ๊ฐ์„ ์žก์œผ๋ฉด ์‰ฝ๊ฒŒ ํ’€์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€

  • ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜ (ํ˜น์€ ์ˆœํ™˜์  ํ˜•ํƒœ)
  • ๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„๋ฌธ์ œ

๋ฅผ ์ฐพ์•„๋‚ด๊ณ , ๊ฐ ๋ถ€๋ถ„๋ฌธ์ œ์˜ ํ•ด๋‹ต์„ ์บ์‹ฑํ•˜๋ฉด ๋œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์šฉ์–ด ๊ตฌ๋ถ„์„ ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

  • top-down ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋ฉ”๋ชจ์ด์ œ์ด์…˜
  • bottom-up ์ ‘๊ทผ๋ฒ• : ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

bottom-up์€ ์ฃผ๋กœ iterativeํ•œ ๊ตฌํ˜„์ด๊ธฐ ๋•Œ๋ฌธ์— '๋ฉ”๋ชจ'๊ฐ€ ๋”ฑํžˆ ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋“ฏ. ํ•˜์ง€๋งŒ ์ฑ…์—์„œ๋Š” ์ „๋ถ€ '๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ ๋ถ€๋ฅธ๋‹ค.

[ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด]
๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ.

๐Ÿ’ก ์žฌ๊ท€

def fib(i):
	if i == 0: return 0
    if i == 1: return 1
    return fib(i-2) + fib(i-1)

์ˆ˜ํ–‰์‹œ๊ฐ„์€?
๊ฐ ํ˜ธ์ถœ์— ์ˆ˜ํ–‰๋˜๋Š” ์‹œ๊ฐ„์€ O(1)์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ˜ธ์ถœํŠธ๋ฆฌ ๊ทธ๋ ค์„œ ํ˜ธ์ถœํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ๋จ.
๋†’์ด๊ฐ€ n์— ๊ฐ ๋…ธ๋“œ๋“ค์ด ๋Œ€๋ถ€๋ถ„ ๋‘ ๊ฐœ์˜ ์ž์‹๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ -> O(2^n).
์‹ค์ œ๋กœ๋Š” ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ์™ผ์ชฝ ๋ถ€๋ถ„ํŠธ๋ฆฌ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์Œ -> O(1.6^n)

๐Ÿ’ก ํ•˜ํ–ฅ์‹ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๋ฉ”๋ชจ์ด์ œ์ด์…˜)
์œ„์˜ ๋ฐฉ์‹์—๋Š” ์ค‘๋ณต ํ˜ธ์ถœ์ด ๋งŽ๋‹ค. ๋งค๋ฒˆ fib(i)๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ๋งˆ๋‹ค ์บ์‹ฑํ•˜๊ณ  ๋‚˜์ค‘์— ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ๊ฒŒ ๋ฐ”๋กœ ๋ฉ”๋ชจ์ด์ œ์ด์…˜.

def fib(i):
    memo = [0, 1]
    return fib_with_memo(i, memo)

def fib_with_memo(i, memo):
    if i < len(memo):
        return memo[i]
    
    a = fib_with_memo(i-2, memo)
    b = fib_with_memo(i-1, memo)
    memo.append(a + b)
    
    return memo[i]

์ˆ˜ํ–‰์‹œ๊ฐ„์€?
ํ˜ธ์ถœํŠธ๋ฆฌ๊ฐ€ ๊นŠ์ด n๊นŒ์ง€ ํ•œ์ชฝ์œผ๋กœ ๊ฑฐ์˜ ๊ณง์žฅ ๋‚ด๋ ค๊ฐ. ๊ฐ ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ๋Š” ๋‘๊ฐœ ์”ฉ. -> O(N)

๐Ÿ’ก ์ƒํ–ฅ์‹ ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ
์žฌ๊ท€์ ์ธ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์œผ๋กœ ์ ‘๊ทผํ•˜๋˜, ๋’ค์ง‘์–ด์„œ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ์ƒ๊ฐ.
์ดˆ๊ธฐ ์‚ฌ๋ก€(base case)์ธ fib(0), fib(1)๋ฅผ ๋จผ์ € ๊ณ„์‚ฐํ•˜๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ฐจ๋ก€๋กœ fib(2), fib(3), ... ๋ฅผ ๊ณ„์‚ฐ.

def fib(n):
	memo = []
    memo.append(0)	# fib(0)
    memo.append(1)	# fib(1)
    
    i = 2
    while i <= n:
    	a = memo[i-2]
        b = memo[i-1]
    	memo.append(a + b)	# fib(i)
    	n += 1
        
    return memo[i]

๋‹จ, ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ์ธ๋ฑ์Šค์—์„œ 2์ด์ƒ ์ง€๋‚œ ๊ฐ’๋“ค์„ ๋”์ด์ƒ ํ™œ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ,
๋ฃจํ”„์— ๋ณ€์ˆ˜๋ฅผ ๋‘๊ณ  ์‚ฌ์šฉํ•ด๋„ ๋œ๋‹ค.

def fib(n):
    a = 0	# fib(0)
    b = 1	# fib(1)
    c = n
    
    i = 2
    while i <= n:
    	c = b + a	# fib(i)
        a = b
        b = c

    return c

๋ฉด์ ‘ ๋ฌธ์ œ

8.1
์œ„์—์„œ ์–ธ๊ธ‰๋œ ์žฌ๊ท€์  ํ•ด๋ฒ•์„ ์ ์šฉ.
"f(n-1)์— ๋Œ€ํ•œ ํ•ด๋‹ต์— ๋”ํ•˜๊ฑฐ๋‚˜/์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜/๋ณ€๊ฒฝํ•˜์—ฌ f(n)์„ ๊ณ„์‚ฐํ•ด๋‚ธ๋‹ค."

n๋ฒˆ์งธ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š”,

  • n-1๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ๋„๋‹ฌํ•œ ํ›„, 1๊ณ„๋‹จ ์˜ค๋ฅธ๋‹ค
  • n-2๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ๋„๋‹ฌํ•œ ํ›„, 2๊ณ„๋‹จ ์˜ค๋ฅธ๋‹ค
  • n-3๋ฒˆ์งธ ๊ณ„๋‹จ๊นŒ์ง€ ๋„๋‹ฌํ•œ ํ›„, 3๊ณ„๋‹จ ์˜ค๋ฅธ๋‹ค

์ด๋ฅผ top-down ์ ‘๊ทผ๋ฒ•์œผ๋กœ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐ.

memo = [0 for _ in range(n+1)]
memo[0] = 1	# for memo[3]
memo[1] = 1
memo[2] = 2

def go(n, memo):
	if memo[n] != 0:
    	return memo[n]

    memo[n] = go(n-1, memo) + go(n-2, memo) + go(n-3, memo)
    return memo[n]

๋‹ค๋งŒ, ๋ฉ”๋ชจ์ด์ œ์ด์…˜๊ณผ ๊ด€๊ณ„์—†์ด, n=37๋งŒ ๋˜์–ด๋„ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ int ์ž๋ฃŒํ˜•์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ ๋‹ค. ๋ฉด์ ‘์—์„œ ํ•ด๊ฒฐํ•  ํ•„์š”๋Š” ์—†๋Š” ๋ฌธ์ œ์ด์ง€๋งŒ(์ž๋ฐ”์—์„  BigInteger๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐ), ์ด ๋ฌธ์ œ์ ์„ ๋ฉด์ ‘๊ด€์—๊ฒŒ ์ง€์ ํ•˜๋ฉด ์ ์ˆ˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

8.2
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์žฌ๊ท€์  ํ•ด๋ฒ•. ๋”๋ถˆ์–ด์„œ,
"๋ฐ˜๋ณต์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„๋ฌธ์ œ๋ฅผ ์ฐพ์•„๋‚ด๊ณ , ๊ฐ ๋ถ€๋ถ„๋ฌธ์ œ์˜ ํ•ด๋‹ต์„ ์บ์‹ฑ"

(r, c)๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด์„œ๋Š”, (r-1, c)์—์„œ ์•„๋ž˜๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๊ฑฐ๋‚˜, (r, c-1)์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ฐ ์ด์ „์นธ์—์„œ ๋‹ค์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋‘˜๋‹ค (r-1, c-1)์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ค‘๋ณตํ•ด์„œ ์ง„ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ์บ์‹ฑํ•œ๋‹ค.

def get_path(maze, r, c, path, failed):
    if r < 0 or c < 0 or not maze[r][c]:
        return False
   	if (r,c) in failed:
    	return False
   
    if (r==0 and c==0) or \
            get_path(maze, r-1, c, path, failed) or \
            get_path(maze, r, c-1, path, failed):
        point = (r,c)
        path.append(point)
        return True
  
    failed.append((r,c))
    return False

์—ฌ๊ธฐ์„œ ๋ณด๋ฉด ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์ง€์ ๋งŒ ์ €์žฅํ•ด๋‘๊ณ (failed), ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์ ์€ ๋”ฐ๋กœ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Š” ๊ฒฐ๊ตญ ์ง€๊ธˆ ํ•ด๋‹ต์„ ์ฐพ๋Š” ๋ฐฉ์‹์ด ์ˆ˜๋งŽ์€ ๋ถ„๊ธฐ(๊ฐ€์ง€์น˜๊ธฐ)๋ฅผ ์‹œ๋„ํ•˜๋ฉด์„œ ๋”ฑ ํ•˜๋‚˜๋งŒ ์„ฑ๊ณต์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ธฐ์— ๊ทธ๋ ‡๋‹ค. ๊ทธ ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ ๋ถ„๊ธฐ ์ค‘์— ํ•˜๋‚˜๊ฐ€ ์–ด๋–ค ํŠน์ • ์ฝœ์Šคํƒ๋“ค์—์„œ ์„ฑ๊ณตํ•  ๊ฒƒ์ด๊ณ , ๊ทธ ๊ณผ์ •์—์„œ ์ด๋ฏธ ์‹คํŒจํ–ˆ๋˜ ๋ถ„๊ธฐ๋“ค๋งŒ ๋‹ค์‹œ ๋ณด์ง€ ์•Š์œผ๋ฉด ๋œ๋‹ค๋Š” ์ ์„ ์ƒ๊ฐํ•ด๋ณด์ž.
๋ฐฑํŠธ๋ž˜ํ‚น ๊ธฐ๋ฒ•์„ ์ฐธ๊ณ .

8.3 half-and-half ์ ‘๊ทผ๋ฒ•.
๋ฌธ์ œ์—๋Š” ์—†์ง€๋งŒ ๊ฐ ์›์†Œ๋“ค์€ ์ •์ˆ˜๋ผ๋Š” ๊ฐ€์ •. ๊ฑฐ์˜ ์ด๋ถ„ํƒ์ƒ‰๊ณผ ํก์‚ฌํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋‹ต์„ ์ฐพ์œผ๋ฉด ๋จ.

8.4 ์ดˆ๊ธฐ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ์˜ ํ™•์žฅ' ์ ‘๊ทผ๋ฒ•.

๋จผ์ €, ์‹œ๊ฐ„๋ณต์žก๋„ ๊ณ„์‚ฐ์„ ์œ„ํ•ด ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์ƒ๊ฐํ•ด๋ณด๊ธฐ.
๋ถ€๋ถ„์ง‘ํ•ฉ์„ ๋งŒ๋“ ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ, ๊ฐ ์›์†Œ๊ฐ€ ํฌํ•จ๋˜๊ฑฐ๋‚˜/์•ˆ๋˜๊ฑฐ๋‚˜ ์ธ ๊ฒฝ์šฐ๊ฐ€ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ๊ณฑํ•ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ฆ‰ n๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ์ง‘ํ•ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ ๊ฐœ์ˆ˜๋Š” {2*2*2*...} ๋ฅผ n๋ฒˆ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, 2^n ์ด๋‹ค.
๊ฒฐ๊ตญ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜์˜ ์ดํ•ฉ๋งŒํผ์€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค.
์ด๋•Œ, ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๋ชจ์Œ ์ค‘์˜ ์ ˆ๋ฐ˜์—๋Š” ์†ํ•˜๊ฒŒ ๋œ๋‹ค. -> {1(์†ํ•œ๊ฒฝ์šฐ)*2*2*...} + {1(์•ˆ์†ํ•œ๊ฒฝ์šฐ)*2*2*...}
๋‹ค์‹œ ๋งํ•ด, ํ•˜๋‚˜์˜ ์›์†Œ๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๋ชจ์Œ์—์„œ 2^(n-1) ๋ฒˆ๋งŒํผ ๊ทธ๊ณณ์˜ ์›์†Œ๋กœ ์ถœํ˜„ํ•˜๊ฒŒ ๋œ๋‹ค.
๊ฒฐ๊ตญ ๋ชจ๋“  ๋ถ€๋ถ„์ง‘ํ•ฉ์˜ ๋ชจ์Œ์˜ ์ด ์›์†Œ์˜ ๊ฐœ์ˆ˜๋Š” n*2^(n-1) ๊ฐ€ ๋˜๋ฏ€๋กœ, ์ด๊ฒƒ์ด BCR(๊ฐ€๋Šฅํ•œ ์ตœ์„ ์˜ ์ˆ˜ํ–‰์‹œ๊ฐ„)์ด ๋œ๋‹ค.

์ดํ›„์—” ์ดˆ๊ธฐ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ ํ™•์žฅ๋ฒ• ์ ์šฉ.

8.5 half-and-half ์ ‘๊ทผ๋ฒ•.

8.6 ์ดˆ๊ธฐ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ์˜ ํ™•์žฅ ์ ‘๊ทผ๋ฒ•.

8.7 ์ดˆ๊ธฐ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ์˜ ํ™•์žฅ ์ ‘๊ทผ๋ฒ•.

8.9 ์ดˆ๊ธฐ ์‚ฌ๋ก€๋กœ๋ถ€ํ„ฐ์˜ ํ™•์žฅ ์ ‘๊ทผ๋ฒ•.
base case์—์„œ ํ™•์žฅํ•˜์—ฌ ์ผ๋ฐ˜ํŒจํ„ด์„ ๋„์ถœํ•˜๊ณ , ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.
ํ•˜์ง€๋งŒ ์•ฝ๊ฐ„ ๋น„ํšจ์œจ์ .

์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ ค๋‚˜๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค. ์™ผ์ชฝ ๊ด„ํ˜ธ์™€ ์˜ค๋ฅธ์ชฝ ๊ด„ํ˜ธ๋ฅผ ๋ถ„๊ธฐํ•ด๊ฐ€๋ฉฐ ๊ทธ๋ฆฌ๋˜, ๊ฐ ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋ฉฐ ๊ทธ๋ฆฌ๊ณ  ๊ด„ํ˜ธ ๋ฌธ๋ฒ•์— ์–ด๊ธ‹๋‚˜์ง€ ์•Š๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ ๊ทธ๋ฆฌ๋ฉด ๋œ๋‹ค.

์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐ ๊ทœ๋ชจ ํ™•์žฅ์„ฑ

  • ์˜ˆ์ƒ ์™ธ๋กœ, ๊ฐ€์žฅ ์‰ฌ์šด ์ข…๋ฅ˜์˜ ๋ฌธ์ œ
  • ์ง€์›์ž๊ฐ€ ์‹ค์ œ ์„ธ๊ณ„์—์„œ ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ• ์ง€๋ฅผ ๋ณด๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ฌธ์ œ
  • ์‹ค์ œ๋กœ ์ผ์„ ํ•˜๋“ฏ์ด ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค. ๋ฉด์ ‘๊ด€์„ ์ฐธ์—ฌ์‹œ์ผœ์„œ ์งˆ๋ฌธํ•˜๊ณ  ํ† ๋ก ํ•˜๋ผ.

๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•

์–ผ๋งˆ๋‚˜ ์ตœ๊ณ ์˜ ์„ค๊ณ„๋ฅผ ํ•˜๋Š๋ƒ ๋ณด๋‹ค๋Š” ๊ทธ ๊ณผ์ •์ด ์ค‘์š”ํ•˜๊ฒŒ ํ‰๊ฐ€๋จ.

  • ์†Œํ†ต : ์ด ๋ฌธ์ œ์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์˜์‚ฌ์†Œํ†ต ๋Šฅ๋ ฅ ํ‰๊ฐ€
  • ํฌ๊ด„์  ์ ‘๊ทผ: ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ”๋กœ ๋›ฐ์–ด๋“ค๊ฑฐ๋‚˜ ํŠน์ • ๋ถ€๋ถ„์— ์ง€๋‚˜์น˜๊ฒŒ ํŒŒ๊ณ ๋“ค์ง€ ๋ง ๊ฒƒ.
  • ํ™”์ดํŠธ ๋ณด๋“œ ์‚ฌ์šฉ: ๊ทธ๋ฆผ ๊ทธ๋ ค๊ฐ€๋ฉฐ ํ•ด๊ฒฐ/์„ค๋ช…
  • ๋ฉด์ ‘๊ด€์˜ ์ง€์ : ์ธ์ •ํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์ •ํ•˜๋ผ.
  • ๋ช…ํ™•ํ•œ ๊ฐ€์ •: ๊ฐ€์ •์„ ํ• ๋•Œ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ณ  ๋ฉด์ ‘๊ด€์—๊ฒŒ ๊ณต์œ ํ•œ๋‹ค.

์‹œ์Šคํ…œ ์„ค๊ณ„

  1. ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ํ•œ์ •
    • ๋‚ด๊ฐ€ ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์‹œ์Šคํ…œ๊ณผ ๋ฉด์ ‘๊ด€์ด ์›ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ™์€์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธ
  2. ํ•ฉ๋ฆฌ์ ์ธ ๊ฐ€์ •์„ ์ƒ์„ฑ
    • ํ•ฉ๋‹นํ•œ ๊ฐ€์ •์„ ํ•ด์•ผํ•จ.
      • ์‹œ์Šคํ…œ์ด ํ•˜๋ฃจ์— 100๋ช…์˜ ์‚ฌ์šฉ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ๋œ๋‹ค / ๋ฉ”๋ชจ๋ฆฌ์— ์ œ์•ฝ์ด ์—†๋‹ค -> ํ•ฉ๋‹นํ•˜์ง€ ๋ชปํ•œ ๊ฐ€์ •
      • ํ•˜๋ฃจ์— ์ตœ๋Œ€ ๋ฐฑ๋งŒ ๊ฐœ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ -> ํ•ฉ๋‹นํ•œ ๊ฐ€์ •
    • ๋•Œ๋กœ๋Š” ํ•ฉ๋‹นํ•จ์˜ ๊ธฐ์ค€์ด ๋งŒ๋“ค๊ณ ์ž ํ•˜๋Š” ์ œํ’ˆ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ '๊ฐ(sense)'์ผ์ˆ˜ ์žˆ๋‹ค.
  3. ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๋จผ์ € ๊ทธ๋ฆผ
    • ์ผ๋‹จ ํ™”์ดํŠธ๋ณด๋“œ์— ์„œ์„œ ์‹œ์Šคํ…œ์˜ ํ๋ฆ„์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ๊ทธ๋ฆฐ๋‹ค.
    • ์ง€๊ธˆ ๋‹จ๊ณ„์—์„  ๋‹จ์ˆœํ•˜๊ณ  ๋ช…๋ฐฑํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ๊ทธ๋ฆฐ๋‹ค.
  4. ํ•ต์‹ฌ ๋ฌธ์ œ์  ์ฐพ๊ธฐ
    • ๋ณ‘๋ชฉ์ง€์ ์„ ์ฐพ๋Š”๋‹ค.
    • ์‹œ์Šคํ…œ์ด ์ฃผ์š”ํ•˜๊ฒŒ ํ’€์–ด์•ผํ•  ๋ฌธ์ œ๋ฅผ ์ฐพ๋Š”๋‹ค.
  5. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์‹œ ์„ค๊ณ„

๊ทœ๋ชจ ํ™•์žฅ์„ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ์„ค๊ณ„ํ•˜๋ผ๋Š” ์š”์ฒญ์ด ์•„๋‹Œ,

  • ์‹œ์Šคํ…œ์˜ ํ•œ ๋ถ€๋ถ„
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (ํ˜น์€ ์ผ๋ฐ˜์ ์ธ ์„ค๊ณ„ ๋ฌธ์ œ์—์„œ '์‹ค์ œ๋กœ' ์ค‘์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ€๋ถ„)

์„ ์„ค๊ณ„ํ•ด๋ณด๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜์„ ๋•Œ, ๊ทœ๋ชจ ํ™•์žฅ์„ฑ์— ์‹ ๊ฒฝ ์จ์•ผํ•œ๋‹ค.

  1. ์งˆ๋ฌธํ•˜๋ผ
    • ๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ , ์„ธ๋ถ€์‚ฌํ•ญ์„ ๋ช…ํ™•ํžˆํ•œ๋‹ค.
  2. ํ˜„์‹ค์  ์ œ์•ฝ์„ ๋ฌด์‹œํ•˜๋ผ
    • ์ผ๋‹จ์€, ๋ฉ”๋ชจ๋ฆฌ ์ œ์•ฝ์ด ์—†๊ณ  ์ปดํ“จํ„ฐ ํ•œ ๋Œ€์—์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •.
    • ์ •๋‹ต์— ๋Œ€ํ•œ ์œค๊ณฝ์„ ๊ทธ๋ฆฌ๋Š”๋ฐ ๋„์›€
  3. ํ˜„์‹ค๋กœ ๋Œ์•„์˜ค๋ผ
    • ํ˜„์‹ค์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ ์„ ๋„์ถœ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ ํ•œ ๋Œ€์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋Š” ์–ผ๋งˆ์ธ์ง€ / ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ  ์ €์žฅํ•  ๊ฒƒ์ธ์ง€
  4. ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ผ
    • ๋ฐœ๊ฒฌํ•œ ๋ฌธ์ œ์ ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ์ง€ ์ƒ๊ฐ.
    • '์ˆœํ™˜์  ์ ‘๊ทผ๋ฒ•(iterative approach)': ๋ฌธ์ œ ํ•ด๊ฒฐ -> ์ƒˆ๋กœ์šด ๋ฌธ์ œ ๋ฐœ์ƒ -> ๋‹ค์‹œ ๋ฌธ์ œ ํ•ด๊ฒฐ -> ๋ฐ˜๋ณต...
    • ์ž์‹ ์˜ ๋‹ต์•ˆ์—์„œ ์ƒˆ๋กœ์šด ๋ฌธ์ œ์ ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด, ๋ฌธ์ œ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ’€ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ์ฆ๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•

์‹œ์Šคํ…œ ์„ค๊ณ„์˜ ํ•ต์‹ฌ ๊ฐœ๋…

์•Œ์•„๋‘๋ฉด ์ข‹์„ ์ง€์‹. ๋งค์šฐ ํ”ผ์ƒ์ ์ด๋ฏ€๋กœ ์ธํ„ฐ๋„ท์„ ํ†ตํ•ด ์ถ”๊ฐ€ ๊ณต๋ถ€ํ•  ๊ฒƒ.

  • ์ˆ˜ํ‰์  vs. ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ
    • ์ˆ˜์ง์  ๊ทœ๋ชจ ํ™•์žฅ : ํŠน์ • ๋…ธ๋“œ์˜ ์ž์›์˜ ์–‘์„ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
    • ์ˆ˜ํ‰์  ๊ทœ๋ชจ ํ™•์žฅ : ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜์ง์ ์ด ์ˆ˜ํ‰์  ๋ณด๋‹ค ์‰ฌ์›€. ํ•˜์ง€๋งŒ ์ œํ•œ์ (๋ฉ”๋ชจ๋ฆฌ ํ˜น์€ ๋””์Šคํฌ ๊ฐ™์€ ๊ฒƒ๋งŒ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ).
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ
    • ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œํ‚ค๊ณ , ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ๋•Œ๋ฌธ์— ์ „์ฒด ์‹œ์Šคํ…œ์ด ๋‹ค์šด๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ญ์ •๊ทœํ™” & NoSQL
    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ join ์—ฐ์‚ฐ์€ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ๊ต‰์žฅํžˆ ๋ฌด๊ฑฐ์›Œ์ง.
    • ์—ญ์ •๊ทœํ™”๋Š” join ์—ฐ์‚ฐ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฌ๋ถ„์˜ ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฝ๊ธฐ ์—ฐ์‚ฐ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚จ ๊ฒƒ.
    • NoSQL์„ ์‚ฌ์šฉํ•˜๋ฉด ๋น„์Šทํ•œ ํšจ๊ณผ. join ์—ฐ์‚ฐ ์ž์ฒด ์ง€์›์ด ์•ˆ๋˜์–ด์„œ ์ž๋ฃŒ ์ €์žฅ์‹œ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ์ด๋จ.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„ํ• (์ƒค๋”ฉ)
    • ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์ปดํ“จํ„ฐ์— ๋‚˜๋ˆ ์„œ ์ €์žฅํ•˜๋Š” ๋™์‹œ์—, ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์ปดํ“จํ„ฐ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹
    • ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๋ถ„ํ•  ๋ฐฉ์‹๋“ค
      • ์ˆ˜์ง์  ๋ถ„ํ•  : ์ž๋ฃŒ์˜ ํŠน์„ฑ๋ณ„๋กœ ๋ถ„ํ• . e.g. ์†Œ์…œ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ๊ฐœ์ธ์ •๋ณด ๊ด€๋ จ ๋ถ€๋ถ„, ๋ฉ”์‹œ์ง€ ๊ด€๋ จ ๋ถ€๋ถ„, ... ์œผ๋กœ ๋ถ„ํ•  ๊ฐ€๋Šฅ. ํŠน์ • ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์งˆ์ˆ˜๋„ ์žˆ์Œ.
      • ํ‚ค/ํ•ด์‹œ ๊ธฐ๋ฐ˜ ๋ถ„ํ•  : like ํ•ด์‹œํ…Œ์ด๋ธ”. ํ•ด์‹œ ๊ฐ’ (๋˜๋Š” ํ‚ค)์— ๋”ฐ๋ผ ํ•ด๋‹น ์„œ๋ฒ„์— ์ €์žฅ. ์ด ๊ฒฝ์šฐ ์„œ๋ฒ„์˜ ๊ฐœ์ˆ˜๊ฐ€ ์‚ฌ์‹ค์ • ๊ณ ์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•จ.
      • ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ถ„ํ•  : ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•  ์กฐํšŒ ํ…Œ์ด๋ธ”(lookup table)์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•. ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋Š” ์ข‹์ง€๋งŒ, ์กฐํšŒ ํ…Œ์ด๋ธ”์ด ๋‹จ์ผ ์žฅ์•  ์ง€์ (single point of failure)๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ์ง€์†์ ์œผ๋กœ ์กฐํšŒํ…Œ์ด๋ธ”์„ ์ฝ๋Š” ํ–‰์œ„๊ฐ€ ์„ฑ๋Šฅ์ด์Šˆ ์•ผ๊ธฐํ•  ์ˆ˜๋„.
  • ์บ์‹ฑ
  • ๋น„๋™๊ธฐ์‹ ์ฒ˜๋ฆฌ & ํ
    • ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋„๋ก
    • ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜, ํ์— ๋„ฃ์–ด๋‘๊ณ  ๋๋‚˜๋ฉด ์•Œ๋ฆผ ์ฃผ๋„๋ก
  • ๋„คํŠธ์›Œํฌ ์„ฑ๋Šฅ ์ฒ™๋„
    • ๋Œ€์—ญํญ(bandwidth) : ๋‹จ์œ„ ์‹œ๊ฐ„์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€์น˜. ์ตœ์ƒ์˜ ์กฐ๊ฑด์„ ๊ฐ€์ •.
    • ์ฒ˜๋ฆฌ๋Ÿ‰(throughput) : ๋‹จ์œ„ ์‹œ๊ฐ„์— ์‹ค์ œ๋กœ ์ „์†ก๋œ ๋ฐ์ดํ„ฐ์˜ ์–‘. ์‹ค์ œ ์ƒํ™ฉ์„ ๊ฐ€์ •.
    • ์ง€์—ฐ ์†๋„(latency) : ๋ฐœ์†ก์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ธ ์‹œ์ ๋ถ€ํ„ฐ ์ˆ˜์‹ ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋Š” ์‹œ์ ๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„
  • MapReduce (823p)
    • ๊ตฌ๊ธ€์—์„œ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ๊ทธ๋žจ.
    • ๊ต‰์žฅํžˆ ์ปค๋‹ค๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋จ.

์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ ๊ณ ๋ คํ•  ์ 

  • ์‹คํŒจ : ์‹œ์Šคํ…œ์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด๋“  ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ ์กด์žฌ. ๋Œ€๋น„์ฑ… ์ค€๋น„ํ•ด์•ผ.
  • ๊ฐ€์šฉ์„ฑ(availability) ๋ฐ ์‹ ๋ขฐ์„ฑ(reliability) : ๊ฐ€์šฉ์„ฑ์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์˜ ์‹œ๊ฐ„์„ ๋ฐฑ๋ถ„์œจ๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ. ์‹ ๋ขฐ์„ฑ์€ ํŠน์ • ๋‹จ์œ„ ์‹œ๊ฐ„์— ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ๊ฐ€๋Šฅํ•  ํ™•๋ฅ .
  • ์ฝ๊ธฐ ์ค‘์‹ฌ vs. ์“ฐ๊ธฐ ์ค‘์‹ฌ : ์ฝ๊ธฐ ์—ฐ์‚ฐ์ด ๋งŽ๋‹ค๋ฉด ์บ์‹œ ์‚ฌ์šฉ์„ ๊ณ ๋ ค. ์“ฐ๊ธฐ ์—ฐ์‚ฐ์ด ๋งŽ๋‹ค๋ฉด ํ ์‚ฌ์šฉ์„ ๊ณ ๋ ค.
  • ๋ณด์•ˆ

์™„๋ฒฝํ•œ ์‹œ์Šคํ…œ์€ ์—†๋‹ค

๋ง ๊ทธ๋Œ€๋กœ.
์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผํ•  ์ผ์€

  • ์‚ฌ๋ก€๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ 
  • ๋ฌธ์ œ์˜ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•˜๊ณ 
  • ํ•ฉ๋ฆฌ์ ์ธ ๊ฐ€์ •์„ ์„ธ์šด ๋’ค
  • ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๊ณ„ํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ธฐ

์„ค๊ณ„ํ•œ ์‹œ์Šคํ…œ์˜ ์•ฝ์ ์— ๋Œ€ํ•ด ์—ด๋ฆฐ ๋งˆ์Œ์œผ๋กœ ๋ฐ›์•„๋“ค์—ฌ์•ผ.

์ •๋ ฌ๊ณผ ํƒ์ƒ‰

๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ •๋ ฌ/ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜๋Š” ๊ฑด ๊ต‰์žฅํžˆ ๊ฐ€์น˜์žˆ๋Š” ์ผ.
์ƒํ™ฉ์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋– ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์–ด์•ผ.

๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[๋ฒ„๋ธ” ์ •๋ ฌ] | ํ‰๊ท  ๋ฐ ์ตœ์•… ์‹คํ–‰์‹œ๊ฐ„: O(n2)O(n^2), ๋ฉ”๋ชจ๋ฆฌ: O(1)O(1)
๋ฐฐ์—ด์˜ ์ฒซ ์›์†Œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ, ํ˜„์žฌ ์›์†Œ๊ฐ€ ๊ทธ๋‹ค์Œ ์›์†Œ๋ณด๋‹ค ํฌ๋ฉด ์„œ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณต. n-1๋ฒˆ ๋น„๊ต, n-2๋ฒˆ ๋น„๊ต, ... , 1๋ฒˆ ๋น„๊ต.

[์„ ํƒ ์ •๋ ฌ] | ํ‰๊ท  ๋ฐ ์ตœ์•… ์‹คํ–‰์‹œ๊ฐ„: O(n2)O(n^2), ๋ฉ”๋ชจ๋ฆฌ: O(1)O(1)
๋ฐฐ์—ด์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๋ฅผ ๊ณ„์†ํ•ด์„œ ๊ณจ๋ผ๋‚ด ์•ž์ชฝ๋ถ€ํ„ฐ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“๋Š” ๋ฐฉ๋ฒ•.

[๋ณ‘ํ•ฉ ์ •๋ ฌ] | ํ‰๊ท  ๋ฐ ์ตœ์•… ์‹คํ–‰์‹œ๊ฐ„: O(nlogn)O(nlogn), ๋ฉ”๋ชจ๋ฆฌ: ์ƒํ™ฉ์—๋”ฐ๋ผ๋‹ค๋ฆ„์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์”ฉ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ์„ ์ •๋ ฌํ•œ ๋‹ค์Œ, ์ด ๋‘˜์„ ํ•ฉํ•˜์—ฌ ๋‹ค์‹œ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•.
๋‚˜๋ˆˆ ์ ˆ๋ฐ˜์„ ์ •๋ ฌํ•  ๋•Œ๋„ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๊ณ , base case ์—๋Š” ํ•œ๊ฐœ์งœ๋ฆฌ ๋ฐฐ์—ด ๋‘๊ฐœ๋ฅผ ํ•ฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒŒ ๋จ.
์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” '๋ณ‘ํ•ฉ(merge)'๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋ณต์žก.
๊ธฐ์กด ๋ฐฐ์—ด์„ temp์— ๋ณต์‚ฌํ•ด ๋‘๊ณ , ์ด temp์˜ ์™ผ์ชฝ ์ ˆ๋ฐ˜์˜ ์‹œ์ž‘, ์˜ค๋ฅธ์ชฝ ์ ˆ๋ฐ˜์˜ ์‹œ์ž‘์„ ๋™์‹œ์— ๋ณด๋ฉด์„œ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์›๋ž˜ ๋ฐฐ์—ด์— ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„๋‚˜๊ฐ„๋‹ค. ๋‘ ์ชฝ ์ค‘ ํ•œ ์ชฝ์˜ ์ˆœํšŒ๊ฐ€ ๋จผ์ € ๋๋‚ฌ์„ ๋•Œ, ๋‹ค๋ฅธ ์ชฝ์˜ ๋‚จ์€ ๋ถ€๋ถ„์„ ์›๋ž˜ ๋ฐฐ์—ด์— ๋‚จ๊น€์—†์ด ๋ณต์‚ฌํ•ด ๋„ฃ๋Š”๋‹ค. ์ด ๋•Œ, ์™ผ์ชฝ์˜ ์ˆœํšŒ๊ฐ€ ๋จผ์ € ๋๋‚ฌ์„ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ์˜ ๋‚จ์€ ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•ด ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ•ด๋‹น ๋ถ€๋ถ„์˜ ์œ„์น˜๋Š” ๋ณ‘ํ•ฉ ์‹œ ์›๋ž˜ ๋ฐฐ์—ด ์ƒ์—์„œ ๋ฎ์–ด์”Œ์›Œ์ง€์ง€ ์•Š์•˜๊ณ , ๋‚จ์€ ๋ถ€๋ถ„์ด ์• ์ดˆ์— ์›๋ž˜ ๋ฐฐ์—ด์—์„œ ๋ณต์‚ฌํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

[ํ€ต ์ •๋ ฌ] | ์‹คํ–‰์‹œ๊ฐ„: ํ‰๊ท  O(nlogn)O(nlogn), ์ตœ์•… O(n2)O(n^2). ๋ฉ”๋ชจ๋ฆฌ: O(logn)O(logn)
๋ฌด์ž‘์œ„๋กœ ์„ ์ •๋œ pivot์— ๋”ฐ๋ผ, ๊ทธ ๋ณด๋‹ค ์ž‘์€ ์›์†Œ๋“ค์€ pivot ์•ž์— ํฐ ์›์†Œ๋“ค์€ pivot ๋’ค๋กœ ๋ณด๋‚ธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ pivot๊ฐ’์˜ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฐฐ์—ด์„ ๋‚˜๋ˆ„์–ด ๊ฐ๊ฐ์—์„œ ๋‹ค์‹œ ๋ฐ˜๋ณต. pivot๊ฐ’์ด ์ค‘๊ฐ„์— ๊ฐ€๊นŒ์šด ๊ฐ’์ด ๋˜๋ฆฌ๋ผ๋Š” ๋ณด์žฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n2)O(n^2) ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Œ.

[๊ธฐ์ˆ˜ ์ •๋ ฌ] | ํ‰๊ท  ๋ฐ ์ตœ์•… ์‹คํ–‰์‹œ๊ฐ„: O(kn)O(kn) (k๋Š” ์ž๋ฆฟ์ˆ˜์˜ ๊ฐœ์ˆ˜)
์ •์ˆ˜์ฒ˜๋Ÿผ ์œ ํ•œํ•œ ๋น„ํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ. ๊ฐ€์žฅ ๋‚ฎ์€ ์ž๋ฆฌ์ˆ˜์—์„œ ์‹œ์ž‘ํ•ด ๊ฐ€์žฅ ๋†’์€ ์ž๋ฆฌ์ˆ˜๊นŒ์ง€, ๊ฐ ์ž๋ฆฌ์ˆ˜๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ž๋ฆฌ์˜ ๊ฐ’์— ๋”ฐ๋ผ ๊ทธ๋ฃน์„ ๋งŒ๋“ ๋‹ค. ์ด ๊ทธ๋ฃน๋“ค์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ˆœ์„œ๊ฐ€, ๋‹ค์Œ ์ž๋ฆฌ์ˆ˜์—์„œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ฐ ๊ทธ๋ฃน ๋‚ด์˜ ์ •๋ ฌ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 12 ์™€ 10 ์ด ์žˆ์œผ๋ฉด ์ฒซ๋ฒˆ์งธ ์ž๋ฆฌ์ˆ˜ ๊ทธ๋ฃน์—์„œ๋Š” 0๊ทธ๋ฃน์— 10์ด, 2๊ทธ๋ฃน์— 12๊ฐ€ ์†ํ•  ๊ฒƒ์ด๋‹ค. ๋‘๋ฒˆ์งธ ์ž๋ฆฌ์ˆ˜ ๊ทธ๋ฃน์—์„œ๋Š” ๋‘๊ฐœ ๋‹ค 1๊ทธ๋ฃน์— ์†ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ ๋‚ด๋ถ€์—์„œ์˜ ์ˆœ์„œ๊ฐ€ ์ด์ „ ์ž๋ฆฌ์ˆ˜ ๊ทธ๋ฃน์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์ •ํ•ด์ง„๋‹ค. 0๊ทธ๋ฃน์— ์†ํ–ˆ๋˜ 10์ด 2๊ทธ๋ฃน์— ์†ํ–ˆ๋˜ 12๋ณด๋‹ค ์•ž์„œ๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๊ฐ€์žฅ ํฐ ์ž๋ฆฌ์ˆ˜๊นŒ์ง€ ์ •๋ ฌ์„ ์™„๋ฃŒํ•˜๋ฉด ๋ฐฐ์—ด ์ „์ฒด์— ๋Œ€ํ•œ ์ •๋ ฌ์ด ์™„์„ฑ๋œ๋‹ค.

ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[์ด์ง„ ํƒ์ƒ‰] | O(logn)O(logn)
์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์›์†Œ x๋ฅผ ์ฐพ๊ณ ์ž ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•. ์ค‘๊ฐ„์— ์œ„์น˜ํ•œ ์›์†Œ์—์„œ ์‹œ์ž‘ํ•ด์„œ, x์™€์˜ ๋Œ€์†Œ๋น„๊ต์— ๋”ฐ๋ผ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„ ์ค‘ ํ•œ ๋ถ€๋ถ„๋งŒ ๊ฐ™์€๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ.

์ด์ง„ํƒ์ƒ‰์—๋งŒ ์–ฝ๋งค์ด์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž. ์ด์ง„ํŠธ๋ฆฌ ํ˜น์€ ํ•ด์‹œํ…Œ์ด๋ธ” ํ†ตํ•ด ํƒ์ƒ‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

10.1

ํ…Œ์ŠคํŒ…

ํ…Œ์ŠคํŒ… ๊ด€๋ จ ์งˆ๋ฌธ๋“ค์€ ๋ณดํ†ต ๋„ค ๊ฐ€์ง€ ๋ฒ”์ฃผ ์ค‘ ํ•˜๋‚˜์— ์†ํ•จ

  1. ์‹ค์ƒํ™œ์—์„œ ์ ‘ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ…Œ์ŠคํŠธ
  2. ์†Œํ”„ํŠธ์›จ์–ด ํ•˜๋‚˜๋ฅผ ํ…Œ์ŠคํŠธ
  3. ์ฃผ์–ด์ง„ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
  4. ๋ฐœ์ƒํ•œ ์ด์Šˆ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ… ์ฐพ์•„๋‚ด๊ธฐ (๋””๋ฒ„๊น…)

๋ฉด์ ‘๊ด€์ด ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ

  • ํฐ ๊ทธ๋ฆผ์„ ์ดํ•ดํ•˜๊ณ  ์žˆ๋Š”๊ฐ€
    • ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ๋ฐ”๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ 
    • ๊ทธ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ์ ˆํžˆ ๋งค๊ธธ ์ˆ˜ ์žˆ๋Š”๊ฐ€
  • ํผ์ฆ ์กฐ๊ฐ์„ ์ œ๋Œ€๋กœ ๋งž์ถ”๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š”๊ฐ€
    • ๊ฐ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋” ํฐ ์ƒํƒœ๊ณ„์˜ ์ผ๋ถ€๋กœ์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋Š”๊ฐ€
    • e.g. ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ๋ฅผ ํ…Œ์ŠคํŠธํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ๊ธฐ๋ณธ ๋™์ž‘ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Gmail์ด๋‚˜ ๋‹ค๋ฅธ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ๊ณผ ์ œ๋Œ€๋กœ ํ†ตํ•ฉ๋˜๋Š” ์ง€๋„ ํ…Œ์ŠคํŠธ
  • ์กฐ์งํ™”
    • ์ƒ๊ฐ๋‚˜๋Š”๋Œ€๋กœ ์•„๋ฌด ๋ฐฉ๋ฒ•์ด๋‚˜ ์ด๋ฆฌ์ €๋ฆฌ ์ฐ”๋Ÿฌ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ
    • ๊ตฌ์กฐ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๋Š”๊ฐ€
    • ์ž˜ ์ •๋ฆฌ๋œ ๋ฒ”์ฃผ๋กœ ์‹œ์Šคํ…œ์„ ๋‚˜๋ˆ„๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๊ฐ€๋Š”๊ฐ€
  • ์‹ค์šฉ์„ฑ
    • ์‹ค์ œ๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํ•ฉ๋ฆฌ์ ์ธ ํ…Œ์ŠคํŠธ ๊ณ„ํš์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋Š”๊ฐ€
    • ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ  ์‹ค์ œ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ ์‚ฌ์šฉ์— ๋„์›€์ด ๋˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๊ฐ€

์‹ค์ œ ์„ธ๊ณ„์˜ ๊ฐ์ฒด ํ…Œ์ŠคํŠธ

  1. ์–ด๋–ค ์‚ฌ์šฉ์ž๊ฐ€ ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ ์ง€ ๋ฉด์ ‘๊ด€๊ณผ ๋…ผ์˜
  2. ์œ ์Šค์ผ€์ด์Šค(use case)๋ฅผ ๋„์ถœ
  3. ํ•œ๊ณ„ ์กฐ๊ฑด(์˜๊ตฌ์  ์†์ƒ ํ˜น์€ ์•ฝ๊ฐ„์˜ ์†์ƒ์ด ๊ฐ€๋Šฅํ•œ ์‚ฌ์šฉ) ํ™•์ธ
  4. ์ŠคํŠธ๋ ˆ์Šค ์กฐ๊ฑด(์‚ฌ์†Œํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ)๊ณผ ์žฅ์•  ์กฐ๊ฑด(๊ธฐ๋Šฅ์— ๊ทน์‹ฌํ•œ ์žฅ์•  ์œ ๋ฐœํ•˜์ง€๋งŒ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋Š”) ํ™•์ธ
  5. ํ…Œ์ŠคํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ธ์ง€

์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŒ…

  • ์‹ค์ œ ์„ธ๊ณ„ ๊ฐ์ฒด ํ…Œ์ŠคํŠธ์™€ ์•„์ฃผ ์œ ์‚ฌ
  • ๋‹ค๋งŒ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ(performance test)์˜ ์„ธ๋ถ€์‚ฌํ•ญ์ด ๊ฐ•์กฐ๋˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Œ
  • ์ˆ˜์ž‘์—… ํ…Œ์ŠคํŠธ vs. ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ
    • ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋‘ ์ž๋™ํ™”ํ•˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ ๋ถˆ๊ฐ€๋Šฅ
    • ์ธ๊ฐ„๊ณผ ์ปดํ“จํ„ฐ๋Š” ๋‘˜ ๋‹ค ํ…Œ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค์˜ ํ•ต์‹ฌ์  ๋ถ€๋ถ„
  • ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ vs. ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ
    • ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ๋Š” ๊ทธ ๋‚ด๋ถ€์˜ ๊ฐœ๋ณ„ ํ•จ์ˆ˜๋“ค์„ ํ”„๋กœ๊ทธ๋žจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ
    • ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ๋„ ์ž๋™ํ™” ๊ฐ€๋Šฅ์€ ํ•˜๋‚˜ ํ›จ์”ฌ ์–ด๋ ค์›€

์ ‘๊ทผ๋ฒ•

  1. ๋ธ”๋ž™๋ฐ•์Šค ํ…Œ์ŠคํŠธ์ธ์ง€ ํ™”์ดํŠธ๋ฐ•์Šค ํ…Œ์ŠคํŠธ์ธ์ง€
    • ๋˜๋„๋ก ์ผ์ฐ ์งˆ๋ฌธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
  2. ๋ˆ„๊ฐ€ ์‚ฌ์šฉ? ์™œ ์‚ฌ์šฉ? (ํฐ ๊ทธ๋ฆผ)
  3. ์–ด๋–ค ์œ ์Šค์ผ€์ด์Šค?
    • ์œ ์Šค์ผ€์ด์Šค๋ฅผ '๋งˆ์ˆ ์ ์œผ๋กœ' ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๋ฉด์ ‘๊ด€๊ณผ ์ƒ์˜ํ•˜์—ฌ ๋„์ถœ
  4. ํ•œ๊ณ„ ์กฐ๊ฑด
  5. ์ŠคํŠธ๋ ˆ์Šค ์กฐ๊ฑด๊ณผ ์žฅ์•  ์กฐ๊ฑด
  6. ํ…Œ์ŠคํŠธ ์‹คํ–‰์€ ์–ด๋–ป๊ฒŒ?
    • ์ž๋™ํ™”๋Š” ์ข€ ๋” ๊ฐ•๋ ฅํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ์ง€๋งŒ, ํฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜๋„.
    • ๊ทธ๋ž˜์„œ ์ˆ˜์ž‘์—… ํ…Œ์ŠคํŠธ ๋˜ํ•œ ํ…Œ์ŠคํŠธ ์ ˆ์ฐจ์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.

ํ•จ์ˆ˜ ํ…Œ์ŠคํŠธ

๊ฐ€์žฅ ์‰ฌ์šด ์ข…๋ฅ˜์˜ ํ…Œ์ŠคํŠธ.
๊ทธ๋ž˜๋„ ๋ฉด์ ‘๊ด€๊ณผ ๋Œ€ํ™” ์ค‘์š”.

์ ‘๊ทผ๋ฒ•
e.g. ์ •๋ ฌ ํ•จ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ,

  1. ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ •์˜
    - ์ •์ƒ์ ์ธ ์ผ€์ด์Šค : ์ „ํ˜•์ ์ธ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ •ํ™•ํ•œ ์ถœ๋ ฅ์„ ๋‚ด๋Š”๊ฐ€?
    ์ „ํ˜•์ ์ด๋ผ๊ณ  ํ•ด์„œ ๊ผญ ํ•˜๋‚˜์ธ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ ์ง์ˆ˜์ผ ๋•Œ ํ™€์ˆ˜์ผ ๋•Œ ๋ชจ๋‘ ์ „ํ˜•์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    - ๊ทน๋‹จ์ ์ธ ์ผ€์ด์Šค : ๋นˆ๋ฐฐ์—ด, ์›์†Œ๊ฐ€ ํ•˜๋‚˜์ธ ๋ฐฐ์—ด, ์•„์ฃผ ์ž‘์€/ํฐ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด
    - null ์ž…๋ ฅ, ์ž˜๋ชป๋œ(illegal) ์ž…๋ ฅ : ์–‘์ˆ˜๋งŒ ๊ฐ€๋Šฅํ•œ๋ฐ ์Œ์ˆ˜ ๋“ฑ.
    - ํŠน์ˆ˜ํ•œ ์ž…๋ ฅ : ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด, ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด
  2. ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ •์˜
    • ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๋Š” ๋Œ€์ฒด๋กœ ์˜ฌ๋ฐ”๋ฅธ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์˜๋ฏธ
    • ๋‹จ, ์ด์™ธ์˜ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ์‚ฌํ•ญ๋„ ์žˆ์„ ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด ์›๋ณธ ๋ฐฐ์—ด์ด ๋ฐ”๋€Œ์ง€ ์•Š์•˜๋Š”์ง€.
  3. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ

๋ฌธ์ œ ํ•ด๊ฒฐ์— ๊ด€ํ•œ ๋ฌธ์ œ

  • ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์žฌ์„ค์น˜ํ•˜๋ผ -> ์ด๋Ÿฐ ์†Œ๋ฆฌ ํ•˜๋ฉด ์•ˆ๋จ.

์ ‘๊ทผ๋ฒ•
e.g. ๊ตฌ๊ธ€ ํฌ๋กฌ์ด ์‹คํ–‰ํ•˜์ž๋งˆ์ž ์ฃฝ๋Š”๋‹ค๋Š” ๋ฒ„๊ทธ ๋ฆฌํฌํŠธ.

  1. ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ดํ•ดํ•˜๋ผ
    • ์ƒํ™ฉ์„ ๊ฐ€๋Šฅํ•œ ํ•œ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŽ์€ ์งˆ๋ฌธ์„ ๋˜์ง€๊ธฐ
      • ๋ฌธ์ œ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ง€์†๋˜์—ˆ๋‚˜?
      • ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „? ์šด์˜์ฒด์ œ ๋ฒ„์ „?
      • ํ•ญ์ƒ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? ๋นˆ๋„๋Š”? ํŠน์ •ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒ?
      • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ค๋ฅ˜๋ฆฌํฌํŠธ๊ฐ€ ๋œจ๋Š”๊ฐ€?
  2. ๋ฌธ์ œ๋ฅผ ์ชผ๊ฐœ๋ผ
    • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ ์ „๊ฐœ ๊ฐ€๋Šฅ
      • Windows์˜ ์‹œ์ž‘ ๋ฉ”๋‰ด๋กœ ๊ฐ„๋‹ค
      • ํฌ๋กฌ ์•„์ด์ฝ˜์„ ํด๋ฆญํ•œ๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์‹œ์ž‘๋œ๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์„ค์ •์„ ์ฝ์–ด ๋“ค์ธ๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ™ˆํŽ˜์ด์ง€์— HTTP ์š”์ฒญ์„ ๋‚ ๋ฆฐ๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ HTTP ์‘๋‹ต์„ ๋ฐ›๋Š”๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ํŒŒ์‹ฑํ•œ๋‹ค
      • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•œ๋‹ค
    • ์–ด๋–ค ์ง€์ ์—์„œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๊นŒ
  3. ๊ตฌ์ฒด์ ์ด๊ณ  ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•œ ํ…Œ์ŠคํŠธ๋“ค์„ ์ƒ์„ฑํ•˜๋ผ
    • ์ƒํ™ฉ ๊ตฌ์„ฑ์š”์†Œ๋“ค ๊ฐ๊ฐ์— ๋Œ€ํ•œ ํ˜„์‹ค์ ์ธ ์ง€์‹œ์‚ฌํ•ญ
    • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ญ˜ ํ•ด๋‹ฌ๋ผ๋Š” ์ง€์‹œ๋Š” ํ•  ์ˆ˜๋„ ์—†๊ณ  ๊ทธ๋“ค์ด ํ•ด์ฃผ์ง€๋„ ์•Š๋Š”๋‹ค.
profile
I think I think too much.

2๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 10์›” 23์ผ

๊ฐ•์šฑ์‹œ ๊ฐ•๋…•ํ•˜์‹ ์ง€์š” .. ๊ฐ•์šฑ์‹œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ .. ๊ธฐ๋Œ€ ๋งŒ๋•…์ž…๋‹ˆ๋‹ค .. ์•„์ขŒ์ขก~

1๊ฐœ์˜ ๋‹ต๊ธ€