์•Œ๊ณ ๋ฆฌ์ฆ˜

    [Algorithm] DFS & BFS | ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

    โ€ปํƒ์ƒ‰: ๋งŽ์€ ๋ฐ์ดํ„ฐ์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ • ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ (1) ์Šคํƒ (2) ํ (3) ์žฌ๊ท€ํ•จ์ˆ˜ (4) ๊ทธ๋ž˜ํ”„ DFS | ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ : ๊นŠ์€ ๋ถ€๋ถ„์„ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ ๐Ÿ‘‰ ํŠน์ • ๊ฒฝ๋กœ๋กœ ํƒ์ƒ‰ํ•˜๋‹ค๊ฐ€ ํŠน์ • ์ƒํ™ฉ์—์„œ ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™์ด ๋“ค์–ด๊ฐ€์„œ ๋…ธ๋“œ ๋ฐฉ๋ฌธ ํ›„ ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ ๋ฐฉ๋ฌธ (1) ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ โ€ป ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ: ์Šคํƒ์— ํ•œ๋ฒˆ ์‚ฝ์ž…๋˜์–ด ์ฒ˜๋ฆฌ๋œ ๋…ธ๋“œ๊ฐ€ ๋‹ค์‹œ ์‚ฝ์ž…๋˜์ง€ ์•Š๊ฒŒ check (2) ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ ์ธ์ ‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— pushํ•˜๊ณ  ๋‹ค์‹œ ๋Œ์•„๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•œ๋‹ค. (3) (2) ๊ณผ์ •์„ ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ๋Š” ์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์™€ ๊ฐ™๋‹ค. 1 → 2 → 5 →6 → 3 → 7 → 4 → 8 ์ฒซ ..

    [Algorithm] ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด | ์†Œ์ˆ˜ ์ฐพ๊ธฐ

    ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ธ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ์›๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๐Ÿ’ก 0๋ถ€ํ„ฐ ๊ตฌํ•˜๊ณ ์žํ•˜๋Š” ์ˆ˜(n)๊นŒ์ง€ True๋กœ ์ฑ„์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๐Ÿ’ก 2๋ฅผ ์ œ์™ธํ•œ 2์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก 3์„ ์ œ์™ธํ•œ 3์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก 5๋ฅผ ์ œ์™ธํ•œ 5์˜ ๋ฐฐ์ˆ˜๋ฅผ False๋กœ ๋ฐ”๊พผ๋‹ค. . . . ๐Ÿ’กn์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜์ด๋ฏ€๋กœ sqrt(n)์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ False๋กœ ๋ฐ”๊พผ๋‹ค. ๐Ÿ’ก2~n๊นŒ์ง€์˜ ์ˆซ์ž ์ค‘ True์ธ ์ˆซ์ž๋“ค์ด ์†Œ์ˆ˜๊ฐ€ ๋œ๋‹ค. ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. def isPrime(n): sieve = [True] * n # n์˜ ์ตœ๋Œ€ ์•ฝ์ˆ˜๋Š” sqrt(n) ์ดํ•˜ m = int(n ** 0.5) for i in range(2, m+1): if sieve[i] == ..

    [Algorithm] ์ •๋ ฌ | ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ๊ณ„์ˆ˜ ์ •๋ ฌ

    ์ •๋ ฌ์ด๋ž€ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜์—ฌ ์žฌ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ํƒ์ƒ‰ํ•˜๋Š” ์ด์ง„ ํƒ์ƒ‰(Binary Search)๋ฅผ ์œ„ํ•ด์„œ๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž˜ ์•Œ์•„๋‘์–ด์•ผ ํ•œ๋‹ค. 1. ์„ ํƒ ์ •๋ ฌ ๐Ÿ“Œ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ตํ™˜ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณต swap(๋ฆฌ์ŠคํŠธ์—์„œ ๋‘ ์›์†Œ์˜ ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…)์„ ์ด์šฉํ•˜๋ฉด ์„ ํƒ์ •๋ ฌ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. arr = [4,3,1,7,2,8,6,5] for i in range(len(arr)): min_index = i # ์šฐ์„  ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ์˜ ์ธ๋ฑ์Šค๋กœ ๋งจ ์•ž์˜ ์›์†Œ๋ฅผ ์ง€์ • for j in range(i+1, len(arr)): # ๋งจ ์•ž ์›์†Œ ์ œ์™ธ if arr[min_index] > arr[j]: # ๊ฐ€์žฅ ์ž‘์€ ..

    [Algorithm] ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ | Dynamic Programming (DP)

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