์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (recursive algorithms)

์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค ์ค‘์—๋Š”, ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. ์ด๊ฒƒ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ์„ฑ์งˆ์ด๋‹ค. ์ฃผ์–ด์ง„ ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ ์ด๊ฒƒ์„ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ณด๋‹ค ์‰ฌ์šด ๋ฌธ์ œ์˜ ๋‹ต์„ ์ด์šฉํ•ด์„œ ํ’€ ์ˆ˜ ์žˆ๋Š” ์„ฑ์งˆ์„ ์ด์šฉํ•ด์„œ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ์šฉํ•จ์œผ๋กœ์จ ํ’€์–ด๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜ (recursive functions)๋ž€ ? ํ•˜๋‚˜์˜ ํ•จ์ˆ˜์—์„œ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ์ข…๋ฅ˜์˜ ๋ฌธ์ œ๊ฐ€ ์žฌ๊ท€์ ์œผ๋กœ ํ•ด๊ฒฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. # n! ํŒฉํ† ๋ฆฌ์•Œ def what(n): if n = 2 ์žฌ๊ท€ํ•จ์ˆ˜ ์ž‘์„ฑ ์—ฐ์Šต์„ ์˜๋„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ, ์žฌ๊ท€์  ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด ๋ณด๊ณ , ๋ฐ˜๋ณต์  ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. def fibonacci(x): if x==0: return 0 elif x==1: retur..

[Python] ๋ณ‘ํ•ฉ ์ •๋ ฌ (Merge Sort)

๋ณ‘ํ•ฉ์ •๋ ฌ๋„ ๋Œ€ํ‘œ์ ์ธ '๋ถ„ํ•  ์ •๋ณต' ๋ฐฉ๋ฒ•์„ ์ฑ„ํƒํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ€ต ์ •๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ O(N * logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ํ€ต์ •๋ ฌ์€ ํ”ผ๋ฒ—๊ฐ’์— ๋”ฐ๋ผ ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ณ‘ํ•ฉ์ •๋ ฌ์€ ์ •ํ™•ํžˆ ๋ฐ˜์ ˆ์”ฉ ๋‚˜๋ˆˆ๋‹ค๋Š” ์ ์—์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ O(N * logN)์„ ๋ณด์žฅํ•œ๋‹ค. ์ผ๋‹จ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ณ  ๋‚˜์ค‘์— ํ•ฉ์ณ์„œ ์ •๋ ฌํ•˜์ž ๋ณ‘ํ•ฉ์ •๋ ฌ์€ ํ•ญ์ƒ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋ฒ—๊ฐ’์ด ๋”ฐ๋กœ ์—†๋‹ค. ๋ฐ˜์œผ๋กœ ์ชผ๊ฐœ๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ logN์„ ๋ณด์žฅํ•œ๋‹ค. ํ•ฉ์น ๋•Œ๋Š” 2์˜ ๋ฐฐ์ˆ˜๋งŒํผ ํ•ฉ์นœ๋‹ค. # ๋ณ‘ํ•ฉ ์ •๋ ฌ (Merge sort) # ์ •๋ ฌ๋ฐฐ์—ด์€ ๋ฐ˜๋“œ์‹œ ์ „์—ญ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค. (์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด) sortedArr = [] def merge(arr, start, middle, end): # start : m , end : n..

[Python] ํ€ต ์ •๋ ฌ (Quick Sort)

์„ ํƒ ์ •๋ ฌ, ๋ฒ„๋ธ” ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋‘ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N^2)์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ปค์ง€๋ฉด ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋”์šฑ ๋น ๋ฅธ ์ •๋ ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋  ํ•„์š”๊ฐ€ ์žˆ๋‹ค. ํ€ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋Œ€ํ‘œ์ ์ธ '๋ถ„ํ•  ์ •๋ ฌ' ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‰๊ท ์†๋„๊ฐ€ O(N * logN)์ด๋‹ค. ํ€ต ์ •๋ ฌ์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ๋‘๊ฐœ์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜๋Š” ์‹์œผ๋กœ ๋น ๋ฅด๊ฒŒ ์ •๋ ฌํ•œ๋‹ค. ํŠน์ •ํ•œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•œ ๋’ค์— ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ํŠน์ •ํ•œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ๋‚˜๋ˆˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ€ต์ •๋ ฌ์—์„œ๋Š” ๊ธฐ์ค€๊ฐ’์ด ์žˆ๋‹ค. ์ด๋ฅผ ํ”ผ๋ฒ—(Pivot)์ด๋ผ ํ•œ๋‹ค. ๋ณดํ†ต ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๊ฐ’์„ ํ”ผ๋ฒ—๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 3 7 8 1 5 9 6 10 2 4 -> 3 2 8 1 5 9 6 10 7 4 ..

[Python] ์„ ํƒ ์ •๋ ฌ (Selection Sort)

๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒํ•ด์„œ ์ œ์ผ ์•ž์œผ๋กœ ๋ณด๋‚ธ๋‹ค. ๋‹ค์Œ 10๊ฐœ์˜ ์ˆ˜๋ฅผ ์˜ค๋ฆ„ ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด๋ณด์ž 1 10 5 8 7 6 4 3 2 9 ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž 1์€ ๊ฐ€์žฅ ์•ž์ชฝ์— ์žˆ์œผ๋‹ˆ ์ •๋ ฌ์ด ๋œ ๊ฒƒ 1 10 5 8 7 6 4 3 2 9 -> 1 2 5 8 7 6 4 3 10 9 1์„ ์ œ์™ธํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ค‘์—์„œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž 2๋ฅผ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” 10๊ณผ ๋ฐ”๊พผ๋‹ค. 1 2 5 8 7 6 4 3 10 9 -> 1 2 3 8 7 6 4 5 10 9 ๊ทธ ๋‹ค์Œ ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž 3์„ ๊ฐ€์žฅ ์•ž์˜ ์ˆซ์ž 5์™€ ๋ฐ”๊พผ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ์ •๋ ฌ์„ ํ•˜๋Š” ๊ฒƒ์ด ์„ ํƒ์ •๋ ฌ ํŒŒ์ด์ฌ ์ฝ”๋“œ # ์„ ํƒ์ •๋ ฌ (Selection Sort) # i์™€ j๋Š” ๋ฐฐ์—ด์— ์›์†Œ๋“ค์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ # min ์ตœ์†Œ๊ฐ’ ์˜๋ฏธ # index ๊ฐ€์žฅ ์ž‘์€ ์›์†Œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์œ„์น˜..

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์Šคํ‚ฌํŠธ๋ฆฌ

๋ฌธ์ œ ์„ค๋ช… ์„ ํ–‰ ์Šคํ‚ฌ์ด๋ž€ ์–ด๋–ค ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ๊ฐ€ ์ŠคํŒŒํฌ → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์ผ๋•Œ, ์ฌ๋”๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๊ณ , ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ์ŠคํŒŒํฌ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ„ ์ˆœ์„œ์— ์—†๋Š” ๋‹ค๋ฅธ ์Šคํ‚ฌ(ํž๋ง ๋“ฑ)์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŒŒํฌ → ํž๋ง → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ฌ๋” → ์ŠคํŒŒํฌ๋‚˜ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ŠคํŒŒํฌ → ํž๋ง → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill๊ณผ ์œ ์ €๋“ค์ด ๋งŒ๋“  ์Šคํ‚ฌํŠธ๋ฆฌ1๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด skill_trees๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์ œํ•œ ์กฐ๊ฑด ..