๐ŸŒˆ [Section2] 6. ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ˜„์ฃผยท2022๋…„ 9์›” 27์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
25/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ์˜์‚ฌ์ฝ”๋“œ (pseudocode)
  • ์‹œ๊ฐ„๋ณต์žก๋„ (Time Complexity)
  • ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy)
  • ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Brute-Force Algorithm)
  • ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Binary Search Algorithm)

โœ๏ธ ์˜์‚ฌ์ฝ”๋“œ (pseudocode)

  • ์ฝ”๋“œ ์ž‘์„ฑ ์ „์—, ์ผ์ƒ ์–ธ์–ด๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ž‘๋™ํ•˜๋Š” ๋…ผ๋ฆฌ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ

  • ์ž์—ฐ์–ด(์ผ์ƒ ์–ธ์–ด)์™€ ํ”„๋กœ๊ทธ๋žจ ์–ธ์–ด์˜ ์กฐํ•ฉ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•จ

โœ” ์žฅ์ 

  • ์‹œ๊ฐ„์ด ๋‹จ์ถ• ๋จ

  • ๋””๋ฒ„๊น…์— ์šฉ์ดํ•จ (์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์˜์‚ฌ์ฝ”๋“œ๋กœ ๋” ๋น ๋ฅด๊ฒŒ ์›์ธ ํŒŒ์•… ๊ฐ€๋Šฅ)

  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๊ณผ ์†Œํ†ต ๊ฐ€๋Šฅ


โœ๏ธ ์‹œ๊ฐ„๋ณต์žก๋„ (Time Complexity)

' ํšจ์œจ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•œ๋‹ค = ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ณ ๋ฏผํ•œ๋‹ค '

  • ์ž…๋ ฅ๊ฐ’์ด ์ปค์ง์— ๋”ฐ๋ผ ์ฆ๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์˜ ๋น„์œจ์„ ์ตœ์†Œํ™”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์‹œ๊ฐ„๋ณต์žก๋„ ํ‘œ๊ธฐ๋ฒ• : Big-O(๋น…-์˜ค) / Big-ฮฉ(๋น…-์˜ค๋ฉ”๊ฐ€) / Big-ฮธ(๋น…-์„ธํƒ€)
    โžœ ๊ฐ๊ฐ ์ตœ์•… / ์ตœ์„  / ์ค‘๊ฐ„(ํ‰๊ท )์˜ ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•
    โžœ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•  ๋•Œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๊ธฐ ๋•Œ๋ฌธ์—
    ์ฃผ๋กœ Big-O ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜ํƒ€๋ƒ„

    ๐Ÿ’ก Big-O ํ‘œ๊ธฐ๋ฒ•
    โžœ '์ž…๋ ฅ๊ฐ’์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์„ ์‹คํ–‰ํ•  ๋•Œ, ์—ฐ์‚ฐ ํšŸ์ˆ˜์— ๋น„ํ•ด ์‹œ๊ฐ„์ด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๋Š”๊ฐ€?' ๋ฅผ ํ‘œํ˜„ํ•œ ๋ฐฉ๋ฒ•

โœ” Big-O ํ‘œ๊ธฐ๋ฒ•์˜ ์ข…๋ฅ˜

( ์—ฐ์‚ฐ์ด ๋น ๋ฅธ ์ˆœ์œผ๋กœ )
โžœ O(1) โžœ O(log n) โžœ O(n) โžœ O(n^2) โžœ O(2^n) โžœ O(n!)

โœ”๏ธ O(1)

  • ์ผ์ •ํ•œ ๋ณต์žก๋„(constant complexity)

  • Big-O ํ‘œ๊ธฐ๋ฒ•์ค‘ ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • ์ž…๋ ฅ๊ฐ’์ด ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜์ง€ ์•Š์Œ
    โžœ ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด, ์ฆ‰์‹œ ์ถœ๋ ฅ๊ฐ’์„ ์–ป์–ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ

    Ex. ๋ฐฐ์—ด์˜ ํŠน์ • ์ธ๋ฑ์Šค ๊ฐ’ ๊ณ„์‚ฐํ•˜๊ธฐ
    โžœ ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋ฌด๋ฆฌ ์ปค์ ธ๋„ ๋‹ค๋ฅธ ๊ณ„์‚ฐ ์—†์ด ํŠน์ • ์ธ๋ฑ์Šค์˜ ๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๋ฉด ๋จ

โœ”๏ธ O(n)

  • ์„ ํ˜• ๋ณต์žก๋„(linear complexity)

  • ์ž…๋ ฅ๊ฐ’์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹œ๊ฐ„ ๋˜ํ•œ ๊ฐ™์€ ๋น„์œจ๋กœ ์ฆ๊ฐ€

    Ex. ํ•˜๋‚˜์˜ for๋ฌธ์œผ๋กœ i๊ฐ€ ์ปค์ง€๋Š” ๋งŒํผ ์ˆœํšŒํ•˜๊ธฐ
    โžœ ์ž…๋ ฅ๊ฐ’์˜ ํฌ๊ธฐ๋ฅผ ๋ชจ๋‘ ์ˆœํšŒํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ๊ฐ’ ๋งŒํผ ์‹œ๊ฐ„์ด ๊ฐ™์ด ์ฆ๊ฐ€ํ•จ
    โ €
    โš ๏ธ ์ž…๋ ฅ๊ฐ’์ด 1์ฆ๊ฐ€ํ•  ๋•Œ ์‹คํ–‰ ์‹œ๊ฐ„์ด 2์ดˆ์”ฉ ์ฆ๊ฐ€ํ•ด๋„ O(n)์œผ๋กœ ํ‘œ๊ธฐ
    โžœ ์ž…๋ ฅ๊ฐ’์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ๊ณ„์ˆ˜(n ์•ž์— ์žˆ๋Š” ์ˆ˜)์˜ ์˜๋ฏธ(์˜ํ–ฅ๋ ฅ)๊ฐ€ ์ ์  ํ‡ด์ƒ‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ๋น„์œจ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด 2๋ฐฐ๊ฐ€ ์•„๋‹Œ 5๋ฐฐ, 10๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ O(n)์œผ๋กœ ํ‘œ๊ธฐ

โœ”๏ธ O(log n)

  • ๋กœ๊ทธ ๋ณต์žก๋„(logarithmic complexity)

  • Big-Oํ‘œ๊ธฐ๋ฒ•์ค‘ O(1) ๋‹ค์Œ์œผ๋กœ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋ณต์žก๋„

    Ex. BST(Binary Search Tree) ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ํƒ์ƒ‰ํ•  ๋•Œ, ๋…ธ๋“œ๋ฅผ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ฆ
    โžœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋‹จ๊ณ„๋“ค์ด ์—ฐ์‚ฐ๋งˆ๋‹ค ํŠน์ • ์š”์ธ์— ์˜ํ•ด ์ค„์–ด๋“ฆ

โœ”๏ธ O(n^2)

  • 2์ฐจ ๋ณต์žก๋„(quadratic complexity)

  • ์ž…๋ ฅ๊ฐ’์ด ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ด n์˜ ์ œ๊ณฑ์ˆ˜์˜ ๋น„์œจ๋กœ ์ฆ๊ฐ€

    Ex. ์ค‘์ฒฉ๋œ for๋ฌธ
    โžœ for๋ฌธ์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ n์˜ ์ œ๊ณฑ์ˆ˜๋กœ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๋Š˜์–ด๋‚จ
    โ €
    โš ๏ธ n^3๊ณผ n^5 ๋„ ๋ชจ๋‘ O(n^2)๋กœ ํ‘œ๊ธฐ
    โžœ n์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์ง€์ˆ˜๊ฐ€ ์ฃผ๋Š” ์˜ํ–ฅ๋ ฅ์ด ์ ์  ํ‡ด์ƒ‰๋˜๊ธฐ ๋•Œ๋ฌธ์—

โœ”๏ธ O(2^n)

  • ๊ธฐํ•˜๊ธ‰์ˆ˜์  ๋ณต์žก๋„(exponential complexity)

Ex. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด fibonacci(n - 1) + fibonacci(n - 2)
โžœ n์„ 40์œผ๋กœ ๋‘์–ด๋„ ์ˆ˜์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๊ณ  n์„ 100์œผ๋กœ ํ•˜๋ฉด ํ‰์ƒ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Œ

โฌ‡๏ธ ์ž…๋ ฅ๋˜๋Š” N๊ฐ’์— ๋”ฐ๋ฅธ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„ โฌ‡๏ธ

โœ” ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ตฌํ•˜๋Š” ์š”๋ น

  • ํ•˜๋‚˜์˜ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์š”์†Œ ์ง‘ํ•ฉ์„ ๋ฐ˜๋ณต ํ•˜๋Š” ๊ฒฝ์šฐ โžœ O (n)
  • ์ปฌ๋ ‰์…˜์˜ ์ ˆ๋ฐ˜ ์ด์ƒ ์„ ๋ฐ˜๋ณต ํ•˜๋Š” ๊ฒฝ์šฐ โžœ O (n / 2) โžœ O (n)
  • ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ์ฝœ๋ ‰์…˜์„ ๋ฐ˜๋ณต ํ•  ๊ฒฝ์šฐ โžœ O (n + m) โžœ O (n)
  • ๋‘ ๊ฐœ์˜ ์ค‘์ฒฉ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝ์šฐ โžœ O (nยฒ)
  • ๋‘ ๊ฐœ์˜ ์ค‘์ฒฉ ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ฝœ๋ ‰์…˜์„ ๋ฐ˜๋ณต ํ•  ๊ฒฝ์šฐ : O (n * m) โžœ O (nยฒ)
  • ์ปฌ๋ ‰์…˜ ์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โžœ O(n*log(n))

โœ๏ธ ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy)

  • ๋งค ์ˆœ๊ฐ„, ์ตœ์ ์ด๋ผ ์ƒ๊ฐ๋˜๋Š” ํ•ด๋‹ต(locally optimal solution)์„ ์ฐพ์œผ๋ฉฐ, ์ด๋ฅผ ํ† ๋Œ€๋กœ ์ตœ์ข… ๋ฌธ์ œ์˜ ํ•ด๋‹ต(globally optimal solution)์— ๋„๋‹ฌํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ์‹

  • ํ•ญ์ƒ ์ตœ์ ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์–ด๋Š ์ •๋„ ์ตœ์ ์— ๊ทผ์‚ฌํ•œ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๋„์ถœํ•  ์ˆ˜ ์žˆ์Œ

โœ” ๋ฌธ์ œํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์„ ํƒ ์ ˆ์ฐจ(Selection Procedure)
    โžœ ํ˜„์žฌ ์ƒํƒœ์—์„œ์˜ ์ตœ์ ์˜ ํ•ด๋‹ต ์„ ํƒ

  2. ์ ์ ˆ์„ฑ ๊ฒ€์‚ฌ(Feasibility Check)
    โžœ ์„ ํƒ๋œ ํ•ด๊ฐ€ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ

  3. ํ•ด๋‹ต ๊ฒ€์‚ฌ(Solution Check)
    โžœ ์›๋ž˜์˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋Š”์ง€ ๊ฒ€์‚ฌ, ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์„ ํƒ ์ ˆ์ฐจ๋กœ ๋Œ์•„๊ฐ€์„œ ์œ„์˜ ๊ณผ์ • ๋ฐ˜๋ณต

โœ” ์กฐ๊ฑด

  1. ํƒ์š•์  ์„ ํƒ ์†์„ฑ(Greedy Choice Property)
    โžœ ์•ž์˜ ์„ ํƒ์ด ์ดํ›„์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„์•ผํ•จ

  2. ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure)
    โžœ ๋ฌธ์ œ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ถ€๋ถ„ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ตœ์ ์˜ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌ์„ฑ

๋Œ€ํ‘œ์ ์ธ Ex.
๊ฐ€๊ฒฉ๊ณผ ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋นต๋“ค์ด ์žˆ์„ ๋•Œ, 35g๊นŒ์ง€ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋ฐฉ์— ์ตœ๋Œ€ํ•œ ๊ฐ€๊ฒฉ์ด ๋งŽ์ด ๋‚˜๊ฐ€๋Š” ๋นต์„ ์ฑ„์šฐ๋ ค๊ณ  ํ•œ๋‹ค. (์ชผ๊ฐœ์–ด ๋„ฃ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค)
โ €
1. ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋นต ์ค‘ ๋ฌด๊ฒŒ ๋Œ€๋น„ ๊ฐ€์žฅ ๋น„์‹ผ ๋นต์„ ๋„ฃ๋Š”๋‹ค.
2. ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋ฌด๊ฒŒ ๋Œ€๋น„ ๋น„์‹ผ ๋นต์„ ๋„ฃ๋Š”๋‹ค.
3. ๊ฐ€๋ฐฉ์— ๋‹ค ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ชผ๊ฐœ์–ด ๋„ฃ๋Š”๋‹ค.


โœ๏ธ ๊ตฌํ˜„ (implementation)

โžœ ๋ณธ์ธ์ด ์„ ํƒํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์„ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์žˆ๋Š” ์ƒํƒœ์—์„œ, ๋ฌธ์ œ์˜ ์กฐ๊ฑด์— ์ „๋ถ€ ๋ถ€ํ•ฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‹ค์ˆ˜์—†์ด ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋‘๋Š” ๊ฒƒ

โœ”๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค.
โžœ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ์ปดํ“จํŒ… ์‚ฌ๊ณ ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.

โœ” ๊ตฌํ˜„๋Šฅ๋ ฅ์„ ๋ณด๋Š” ๋Œ€ํ‘œ์  ์‚ฌ๋ก€

  • ์™„์ „ ํƒ์ƒ‰ (brute force)
    โžœ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ํ™•์ธํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ์‹

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜ (simulation)
    โžœ ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ณต์žกํ•œ ๊ตฌํ˜„ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ•˜๋‚˜๋„ ๋น ํŠธ๋ฆฌ์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋กœ ์˜ฎ๊ฒจ, ๋งˆ์น˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ


โœ๏ธ ์™„์ „ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Brute-Force Algorithm)

  • ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

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

  • But, ์ตœ์ ์˜ ์†”๋ฃจ์…˜์€ ์•„๋‹˜

๐Ÿ’ก ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๊ณต๊ฒฉ (Brute Force Attack)

  • ํŠน์ •ํ•œ ์•”ํ˜ธ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„œ ๋ชจ๋“  ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ง€๋Šฅํ˜• ์ „๋žต์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์กฐํ•ฉ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ์„ ์‹œ๋„ํ•˜์—ฌ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๋ฐฉ๋ฒ•

โœ” ์‚ฌ์šฉ๋˜๋Š” ๋•Œ

  1. ํ”„๋กœ์„ธ์Šค ์†๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์—†์„ ๋•Œ

  2. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์—ฌ๋Ÿฌ ์†”๋ฃจ์…˜์ด ์žˆ๊ณ  ๊ฐ ์†”๋ฃจ์…˜์„ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ

  • ์ˆœ์ฐจ ๊ฒ€์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    โžœ ๋ฐฐ์—ด ์•ˆ์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์ธ๋ฑ์Šค ๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰

  • ๋ฌธ์—ด ๋งค์นญ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Brute-Force String Matching)
    โžœ ๊ธธ์ด๊ฐ€ n์ธ ์ „์ฒด ๋ฌธ์ž์—ด๊ณผ ๊ธธ์ด๊ฐ€ m์ธ ๋ฌธ์ž์—ด ํŒจํ„ด์„ ํฌํ•จํ•˜๋Š”์ง€ ๊ฒ€์ƒ‰

  • ์„ ํƒ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Selection Sort)
    โžœ ์ „์ฒด ๋ฐฐ์—ด์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ํ˜„์žฌ ์š”์†Œ์™€ ๊ทธ ๋‹ค์Œ ์š”์†Œ์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ปฌ๋ ‰์…˜์ด ์™„์ „ํžˆ ์ •๋ ฌ๋  ๋•Œ๊นŒ์ง€ ํ˜„์žฌ ์š”์†Œ๋ณด๋‹ค ๋” ์ž‘๊ฑฐ๋‚˜ ํฐ ์š”์†Œ(์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์— ๋”ฐ๋ผ)์˜ ์ž๋ฆฌ๋ฅผ ๊ตํ™˜ํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ฒ„๋ธ” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Bubble Sort)

  • Tree ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์™„์ „ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Exhausive Search (BFS, DFS)

  • ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ - DP(Dynamic Programing)

โœ” ํ•œ๊ณ„

  • ๋ฌธ์ œ์˜ ๋ณต์žก๋„์— ๋งค์šฐ ๋ฏผ๊ฐ
    โžœ ๋ฌธ์ œ๊ฐ€ ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ๋งŽ์€ ์ž์›์„ ํ•„์š”๋กœ ํ•˜๋Š” ๋น„ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

โœ๏ธ ์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Binary Search Algorithm)

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ์—์„œ ์ ˆ๋ฐ˜์”ฉ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ  ๋ถ„ํ•  ์ •๋ณต๊ธฐ๋ฒ•์œผ๋กœ ํŠน์ •ํ•œ ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋ณต์žก๋„ : O(log n)

โœ”๏ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜
์ˆ˜๋งŽ์€ ๋ฐ์ดํ„ฐ์ค‘ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๋‚ผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • Linear Search Algorithm(์„ ํ˜• ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)
  • Binary Search Algorithm(์ด์ง„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)
  • Hash Search Algorithm(ํ•ด์‹œ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜)

โœ” ์‚ฌ์šฉ๋˜๋Š” ๋•Œ

  1. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์š”์†Ÿ๊ฐ’์„ ๋” ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‚ฌ์šฉ

  2. ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์„ ๋•Œ ์‚ฌ์šฉ
    โžœ ๊ณ„์† ๋ฐ˜์œผ๋กœ ์ž๋ฅด๋ฉด์„œ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์œผ๋ฉด ๋งŽ์„์ˆ˜๋ก ํšจ์œจ์ด ๋†’์•„์ง

( But, ๋ฐ์ดํ„ฐ์–‘์ด ์ ๊ณ , ์•ž์ชฝ์— ์œ„์น˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•  ๊ฒฝ์šฐ์—๋Š” Linear Search Algorithm์ด ๋” ๋นจ๋ฆฌ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ )

Ex. ์‚ฌ์ „, ๋„์„œ๊ด€์˜ ๋„์„œ์™€ ๊ฐ™์€ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰

โœ” ๋™์ž‘ ๋‹จ๊ณ„

  1. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •

  2. ์ฐพ์œผ๋ ค๊ณ  ํ•˜๋Š” ๊ฐ’ = ์ง€์ •ํ•œ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’ ์ด๋ฉด ํƒ์ƒ‰ ์ข…๋ฃŒ / ์•„๋‹ˆ๋ผ๋ฉด 3๋‹จ๊ณ„ ์‹คํ–‰

  3. ์ฐพ์œผ๋ ค๊ณ  ํ•˜๋Š” ๊ฐ’์ด ์ค‘๊ฐ„ ์ธ๋ฑ์Šค์˜ ๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ธ์ง€, ์ž‘์€ ๊ฐ’์ธ์ง€ ํ™•์ธ

  4. ๊ฐ’์ด ์žˆ๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ’์ด ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ถ„๋ฆฌ

  5. ๊ฐ’์ด ์žˆ๋Š” ๋ถ€๋ถ„์—์„œ ๋‹ค์‹œ 1๋‹จ๊ณ„๋ถ€ํ„ฐ ๋ฐ˜๋ณต

โžœ ๋ฐ˜์œผ๋กœ ์ž๋ฅด๊ณ  ํƒ์ƒ‰ํ•˜๊ณ  ๋˜ ๊ฑฐ๊ธฐ์„œ ๋ฐ˜์œผ๋กœ ์ž๋ฅด๊ณ  ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ฐพ๋Š” ๊ฒƒ

โœ” ํ•œ๊ณ„

  • ๋ฐฐ์—ด์—๋งŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ

  • ์ •๋ ฌ๋˜์–ด ์žˆ์–ด์•ผ๋งŒ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
    โžœ ๊ทœ๋ชจ๊ฐ€ ์ž‘์€ ๋ฐฐ์—ด์ด๋ผ๋„ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ •๋ ฌ์„ ํ•œ ํ›„ Binary Search Algorithm์„ ์‚ฌ์šฉํ•ด๋„ ํšจ์œจ์ด ๋†’์ง€ ์•Š์Œ

๐Ÿ’ก BST (Binary Search Tree) vs BSA (Binary Search Algorithm)
BST - ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋ƒ„
BSA - ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋‚˜ํƒ€๋ƒ„


๐ŸŒˆ ๋Š๋‚€์ 

์˜ค๋Š˜์€ ๊ฐœ๋…๋“ค์ด ๋งŽ์•˜๋Š”๋ฐ ์‚ฌ์‹ค ์ฝ์œผ๋ฉด์„œ ์™ผ์ชฝ ๊ท€๋กœ ๋“ค์–ด๊ฐ€์„œ ์˜ค๋ฅธ์ชฝ ๊ท€๋กœ ๋‚˜์˜ค๋Š” ๊ธฐ๋ถ„์ด์—ˆ๋‹ค
์ง‘์ค‘์ด ์™œ ์ด๋ ‡๊ฒŒ ์•ˆ๋ผ ,, ๋‚ ์ด ์ข‹์•„์„œ ๊ทธ๋Ÿด๊นŒ..?
๋ฌธ์ œ ํ’€ ๋•Œ๋Š” ์ดํ•ด๋„ ์•ˆ๋˜๊ณ  ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์œผ๋‹ˆ ๋ช‡์‹œ๊ฐ„์ด๋˜ ์‹œ๊ฐ„๊ฐ€๋Š” ์ค„ ๋ชจ๋ฅด๊ณ  ๋ณด๋Š”๋ฐ ์ด๋Ÿฐ ๊ฐœ๋…์€ ์ง์ ‘ ํ•ด๋ณด์ง€ ์•Š์œผ๋‹ˆ ๋ญ”๊ฐ€ ๋จธ๋ฆฟ์†์— ์•ˆ๋“ค์–ด์˜จ๋‹ค ใ… 
์˜ค๋Š˜๋„ ๋นก๊ณตํ•ด์„œ ๋‚ด์ผ ๋ฌธ์ œ ์ž˜ ํ’€ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ์ง€

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