Bibi's DevLog ๐Ÿค“๐ŸŽ

[Hello Coding ์•Œ๊ณ ๋ฆฌ์ฆ˜] 1. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์†Œ๊ฐœ ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Algorithm ์•Œ๊ณ ๋ฆฌ์ฆ˜

[Hello Coding ์•Œ๊ณ ๋ฆฌ์ฆ˜] 1. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์†Œ๊ฐœ

๋น„๋น„ bibi 2021. 2. 3. 22:26

[Hello Coding] ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1์žฅ. ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์†Œ๊ฐœ

์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?

: ์–ด๋–ค ์ผ์„ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น์˜ ์ง‘ํ•ฉ.
ํŠนํžˆ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ณด๋‹ค ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ๊ฒƒ.

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ

  • ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์˜ ์žฅ๋‹จ์ ๊ณผ ์ฐจ์ด์ ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
  • ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ์ž๋ฃŒ๊ตฌ์กฐ/์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

์ด์ง„ ํƒ์ƒ‰

ํƒ์ƒ‰ ๋ฌธ์ œ Search

: ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์–ด๋–ค ๋ฐฉ๋ฒ•์œผ๋กœ ์ฐพ์„ ๊ฒƒ์ธ๊ฐ€.
์˜ˆ) 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ˆซ์ž๋“ค ์ค‘ '78'์ด๋ผ๋Š” ์ˆซ์ž ์ฐพ๊ธฐ

๋‹จ์ˆœ ํƒ์ƒ‰ Simple search

: ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ํ•ญ๋ชฉ์„ ํƒ์ƒ‰
์˜ˆ) 1, 2, 3, 4, ... 77, 78 ์ˆœ์œผ๋กœ ํƒ์ƒ‰ํ•ด 78์„ ์ฐพ๋Š”๋‹ค.

  • N๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ ์ตœ๋Œ€ N๋ฒˆ ๋งŒ์— ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰ Binary search

  • ์ •๋ ฌ๋œ ์›์†Œ ๋ฆฌ์ŠคํŠธ์—์„œ,
  • ์›ํ•˜๋Š” ์›์†Œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ / ์—†์œผ๋ฉด null์„ ๋ฐ˜ํ™˜.
  • N๊ฐœ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฆฌ์ŠคํŠธ์—์„œ ์ตœ๋Œ€ log2 N๋ฒˆ ๋งŒ์— ๋‹ต์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด์ง„ ํƒ์ƒ‰์˜ ๋™์ž‘์›๋ฆฌ

: ๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ค‘๊ฐ„ ๊ฐ’๋ณด๋‹ค ํฐ์ง€/์ž‘์€์ง€/๊ฐ™์€์ง€ ํŒ๋‹จํ•ด, ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ๊ฐ€๋ฉด์„œ ๋ฐ˜๋ณต ํƒ์ƒ‰ํ•œ๋‹ค.

์˜ˆ์‹œ)
1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ˆซ์ž๋“ค ์ค‘ 57์˜ ์ธ๋ฑ์Šค ์ฐพ๊ธฐ

  • 50์ด๋ผ๋Š” ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ํฐ์ง€ ์ž‘์€์ง€ ํŒ๋‹จ -> ํฌ๋‹ค.
  • 1-50์€ ๋ฒ”์œ„์—์„œ ์ œ์™ธํ•œ ๋‹ค์Œ, 51-100 ์˜ ์ค‘๊ฐ„์ธ 75๋ณด๋‹ค ํฐ์ง€ ์ž‘์€์ง€ ํŒ๋‹จํ•œ๋‹ค. -> ์ž‘๋‹ค.
  • 75-100์€ ๋ฒ”์œ„์—์„œ ์ œ์™ธํ•œ ๋‹ค์Œ, 51-74 ์˜ ์ค‘๊ฐ„์ธ 63๋ณด๋‹ค ํฐ์ง€ ์ž‘์€์ง€ ํŒ๋‹จํ•œ๋‹ค.
  • ... ๋ฅผ ๋ฐ˜๋ณตํ•ด ๋‹ต์„ ์ฐพ๋Š”๋‹ค.

1-100 ์ค‘ ์–ด๋–ค ์ˆซ์ž๋ผ๋„ ์ตœ๋Œ€ 7๋ฒˆ ๋งŒ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์‹คํ–‰ ์‹œ๊ฐ„ running time

์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด๋‚˜ ์ €์žฅ๊ณต๊ฐ„์„ ์ ˆ์•ฝํ•ด ์ฃผ๋Š” ๊ฐ€์žฅ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐพ๊ณ  ์‹ถ์–ด ํ•œ๋‹ค.

์„ ํ˜• ์‹œ๊ฐ„ linear time

: ๋‹จ์ˆœํƒ์ƒ‰๊ณผ ๊ฐ™์ด, N๊ฐœ ์ค‘์—์„œ ์ฐพ์„ ๋•Œ ์ตœ๋Œ€ N๋ฒˆ ๋งŒ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์„ ํ˜• ์‹œ๊ฐ„์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋กœ๊ทธ ์‹œ๊ฐ„ logarithmic time

: ์ด์ง„ํƒ์ƒ‰๊ณผ ๊ฐ™์ด, N๊ฐœ ์ค‘์—์„œ ์ฐพ์„ ๋•Œ ์ตœ๋Œ€log2 N๋ฒˆ ๋งŒ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋กœ๊ทธ ์‹œ๊ฐ„์œผ๋กœ ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ• Big O notation

: ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ํ‘œ๊ธฐ๋ฒ•์ด๋‹ค.

  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์†๋„๋ฅผ ์‹œ๊ฐ„์ด ์•„๋‹Œ ์—ฐ์‚ฐํšŸ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”์ง€๋กœ ์ธก์ •ํ•œ๋‹ค.
    ์ฆ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋™์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ๋Œ€ ์—ฐ์‚ฐ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์€ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    ๋‹จ์ˆœํƒ์ƒ‰์˜ ๊ฒฝ์šฐ) ์•„๋ฌด๋ฆฌ ๋Š๋ ค์ ธ๋„ O(n)๋ณด๋‹ค ๋Š๋ ค์ง€์ง„ ์•Š์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด..

๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ๊ฐ€ n์ผ ๋•Œ ์–ด๋–ค ์›์†Œ๋ฅผ ์ฐพ์œผ๋ ค๋ฉด

  • ๋‹จ์ˆœ ํƒ์ƒ‰
    : n๋ฒˆ ์—ฐ์‚ฐํ•ด์•ผ ํ•œ๋‹ค - O(n) ๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ‘œ๊ธฐํ•œ๋‹ค.
    (O(n) : n์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด n๋ฒˆ ์—ฐ์‚ฐํ•ด์•ผ ํ•จ์„ ์˜๋ฏธ)

  • ์ด์ง„ ํƒ์ƒ‰
    : log2 n๋ฒˆ ์—ฐ์‚ฐํ•ด์•ผ ํ•œ๋‹ค - O(log n)๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ‘œ๊ธฐํ•œ๋‹ค.
    (O(log n) : n์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์œ„ํ•ด log2 n๋ฒˆ ์—ฐ์‚ฐํ•ด์•ผ ํ•จ์„ ์˜๋ฏธ)

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์—์„œ log๋Š”..

๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•์— ๋‚˜ํƒ€๋‚œ ๋ชจ๋“  logํ•จ์ˆ˜๋Š” log2 (๋ฐ‘์ด 2์ธ ๋กœ๊ทธ)๋ฅผ ๋œปํ•œ๋‹ค.

๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋น…์˜ค ์‹คํ–‰์‹œ๊ฐ„

๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋น…์˜ค ์‹คํ–‰์‹œ๊ฐ„์„ ๋‹ค์„ฏ ๊ฐœ๋งŒ ์•Œ์•„๋ณธ๋‹ค.

  • O(log n) , ๋กœ๊ทธ ์‹œ๊ฐ„
    : ๋‹ค์„ฏ ๊ฐœ ์ค‘ ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.
    ์ด์ง„ ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ.
  • O(n), ์„ ํ˜• ์‹œ๊ฐ„
    : ๋‹ค์„ฏ ๊ฐœ ์ค‘ ๋‘ ๋ฒˆ์งธ๋กœ ๋น ๋ฅด๋‹ค.
    ๋‹จ์ˆœ ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ.
  • O(n * log n)
    : ๋‹ค์„ฏ ๊ฐœ ์ค‘ ์„ธ ๋ฒˆ์งธ๋กœ ๋น ๋ฅด๋‹ค.
    ํ€ต ์ •๋ ฌ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ.
  • O(n2) (n์ œ๊ณฑ)
    : ๋‹ค์„ฏ ๊ฐœ ์ค‘ ๋„ค ๋ฒˆ์งธ๋กœ ๋น ๋ฅด๋‹ค.
    ์„ ํƒ ์ •๋ ฌ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ.
  • O(n!) (nํŒฉํ† ๋ฆฌ์–ผ)
    : ๋‹ค์„ฏ ๊ฐœ ์ค‘ ๋‹ค์„ฏ ๋ฒˆ์งธ๋กœ ๋น ๋ฅด๋‹ค (๊ฐ€์žฅ ๋Š๋ฆฌ๋‹ค).
    ์™ธํŒ์› ๋ฌธ์ œ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ.