๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๐Ÿ”…๊ฐœ๋…์ •๋ฆฌ

๊ฒ€์ƒ‰๊ฒฐ๊ณผ 14 ๊ฐœ
[ํŒŒ์ด์ฌ/python] ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Dijkstra Algorithm)

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทธ๋ž˜ํ”„์—์„œ ์ •์  ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ทธ๋ž˜ํ”„์—์„œ ์ฃผ์–ด์ง„ ์‹œ์ž‘ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฅธ ์ •์  ๊ฐ„์˜ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ฆ‰, u์—์„œ v๋กœ ๊ฐˆ ๋•Œ ๊ฒฝ๋กœ ์ค‘ ๊ฐ„์„ ๋“ค์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์ด ์ตœ์†Œ๊ฐ€ ๋˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ค ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ์ •์ ๊นŒ์ง€ ๊ฐ€๋Š” ๊ฒฝ๋กœ๋ฅผ ์ฐพ์„ ๋•Œ ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด ๋ฉˆ์ถ”๋Š” ์‹์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์ด๊ณ  ์‹œ์ž‘๋…ธ๋“œ๊ฐ€ 1์ผ ๋•Œ, ์‹œ์ž‘๋…ธ๋“œ : [(๋„์ฐฉ๋…ธ๋“œ, ๊ฐ€์ค‘์น˜)] ํ˜•์‹์œผ๋กœ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค n = 1 graph = { 1: [(2,2), (3,3)], 2: [(3,4), (4,5)], 3: [(4,6)], 5: [(1,1)] } ๊ฐ ์ •์ ์— ๋Œ€ํ•œ ์‹œ์ž‘๋…ธ๋“œ๋ถ€ํ„ฐ ํ•ด๋‹น ์ •์ ๊นŒ์ง€์˜ ๊ฐ€์ค‘์น˜ ํ•ฉ์„ ์ €์žฅํ•  p..

[ํŒŒ์ด์ฌ/python] DFS์™€ BFS

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS์™€ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ทธ๋ž˜ํ”„๋ž€ ์ •์  node์™€ ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„  edge๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS DFS๋Š” Depth First Search์˜ ์•ฝ์ž๋กœ, ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. ์ตœ๋Œ€ํ•œ ๊นŠ์ด ๋‚ด๋ ค๊ฐ„ ๋’ค ๋”์ด์ƒ ๊ฐˆ ๊ณณ์ด ์—†์„ ๊ฒฝ์šฐ ์˜†์œผ๋กœ ์ด๋™ํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฃจํŠธ๋…ธ๋“œ์—์„œ ๋‹ค์Œ ๋ถ„๊ธฐ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•œ๋‹ค. ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•˜๋ฉฐ, BFS๋ณด๋‹ค ์ข€ ๋” ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฒ€์ƒ‰์†๋„๋Š” ๋Š๋ฆฌ๋‹ค. ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ ์Šคํƒ์„ ์ด์šฉํ•œ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS BFS๋Š” Breadth First Search์˜ ์•ฝ์ž๋กœ, ๋ฃจํŠธ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ธŒ๋ฃจํŠธํฌ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Brute Force)

๋ธŒ๋ฃจํŠธํฌ์Šค๋ž€ ์ง์Šน(Brute), ํž˜(Force)์ด๋ผ๋Š” ์˜๋ฏธ์ฒ˜๋Ÿผ ๋ฌด์‹ํ•˜๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ํ•ด๋ณด๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋œปํ•˜๋ฉฐ ์™„์ „ ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ๋ฌธ์ œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฃผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์š”๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. ๋ธŒ๋ฃจํŠธํฌ์Šค๋Š” ์‹œ๊ฐ„ ์ธก๋ฉด์—์„œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด์ง€๋งŒ ๋งŒ๋“ค๊ธฐ ์‰ฝ๊ณ  100%์˜ ํ™•๋ฅ ๋กœ ์ •๋‹ต์„ ๋„์ถœํ•œ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ๋˜ํ•œ, ๋ธŒ๋ฃจํŠธํฌ์Šค์—์„œ ์‹œ์ž‘ํ•ด ์ข€ ๋” ๋ฐœ์ „๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ๊ฐํ•˜๋Š” ์ถœ๋ฐœ์ ์ด ๋˜๊ธฐ๋„ ํ•œ๋‹ค. ์•„๋ž˜๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋„๊ตฌ์˜ ์˜ˆ์ด๋‹ค. ์ˆœ์ฐจ ํƒ์ƒ‰ : ์„ ํ˜• ๊ตฌ์กฐ๋ฅผ ์ „์ฒด์ ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ (DFS, Depth First Search) : ์ˆ˜์ง ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๊ธฐ๋ฒ•์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น๊ณผ ๊ด€๋ จ์ด ๊นŠ๋‹ค. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ (BFS, Breadth First Se..

[ํŒŒ์ด์ฌ/python] ์ˆœ์—ด๊ณผ ์กฐํ•ฉ : itertools ์ด์šฉํ•˜๊ธฐ (permutations, combinations)

itertools๋ฅผ ์ด์šฉํ•˜์—ฌ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋”์šฑ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. 1. ์ˆœ์—ด : permutations(N, r) N์—์„œ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , r๊ฐœ๋ฅผ ๋ฝ‘์•„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ๋‹ค. ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ๋ฝ‘์€ ๊ฒƒ ์ค‘ ๊ฐ™์€ ๊ฐ’์ด ๋‚˜์˜ฌ ์ˆ˜ ์—†๋‹ค. ๋ฝ‘ํžŒ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค. ๊ฐ™์€ ๊ฐ’๋“ค์ด ๋ฝ‘ํžˆ๋”๋ผ๋„ ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค. from itertools import permutations # for ๋ฌธ์„ ์ด์šฉํ•˜์ง€์•Š๊ณ  ๊ตฌํ˜„ํ•˜๊ธฐ print(list(map(''.join, permutations(['A', 'B', 'C'])))) >>> ['ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'] # for ๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๊ธฐ for i in permut..

[ํŒŒ์ด์ฌ/python] ๋™์ ๊ณ„ํš๋ฒ• (Dynamic Programming)

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

[ํŒŒ์ด์ฌ/python] ํ (Queue)

ํ(Queue)๋Š” ์Šคํƒ(Stack)๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฐ˜๋Œ€์˜ ์„ฑ๊ฒฉ์„ ์ง€๋‹Œ๋‹ค. ์Šคํƒ์€ LIFO(Last In First Out)์˜ ํ˜•ํƒœ๋กœ ๋งˆ์ง€๋ง‰์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๊ณ  ํ๋Š” FIFO(First In First Out)์˜ ํ˜•ํƒœ๋กœ ์ฒซ ๋ฒˆ์งธ ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒซ ๋ฒˆ์งธ๋กœ ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์ผ์ฐจ์›์˜ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ธ ํ๋Š” ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์—ฐ์‚ฐ enqueue์™€ ๊ฐ’์„ ๊บผ๋‚ด๋Š” ์—ฐ์‚ฐ dequeue๊ฐ€ ์žˆ์–ด์•ผํ•œ๋‹ค. ํ์˜ ์ข…๋ฅ˜๋กœ๋Š” ์„ ํ˜• ํ(Queue), ์›ํ˜• ํ(Circular Queue), ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)๊ฐ€ ์žˆ๋‹ค. ์„ ํ˜• ํ๋Š” ๋ง‰๋Œ€๋ชจ์–‘์˜ ํ๋กœ ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋นˆ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด๊ฑฐ๋‚˜ ์ž๋ฃŒ๋ฅผ ํ•œ์นธ์”ฉ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์•ผํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์„ ํ˜• ํ์˜ ๋‹จ์ ์„ ๋ณด์™„..