๐Ÿ”— Algorithm/Tip

    [Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)

    [Python] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP)

    ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ•ต์‹ฌ์€ ์ ํ™”์‹๊ณผ memoization ์ด๋‹ค. DP๋Š” ์ฃผ๋กœ bottom-up ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, top-down์œผ๋กœ๋„ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค. top-down์€ ์žฌ๊ท€+memoization์„ ํ†ตํ•ด ๊ตฌํ˜„ํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ DP๋ฌธ์ œ๋กœ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค. https://www.acmicpc.net/problem/2748 2748๋ฒˆ: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ 2 ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 0๊ณผ 1๋กœ ์‹œ์ž‘ํ•œ๋‹ค. 0๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 0์ด๊ณ , 1๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜๋Š” 1์ด๋‹ค. ๊ทธ ๋‹ค์Œ 2๋ฒˆ์งธ ๋ถ€ํ„ฐ๋Š” ๋ฐ”๋กœ ์•ž ๋‘ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ํ•ฉ์ด ๋œ๋‹ค. ์ด๋ฅผ ์‹์œผ๋กœ ์จ๋ณด๋ฉด Fn = Fn-1 + Fn-2 (n โ‰ฅ 2)๊ฐ€ www.acmicpc.net ๐Ÿ“ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์˜ ์ ํ™”์‹์€ f(n) = f(n-1) + f(n-2) (n>=2) ๐Ÿ“Œ Bottom-Up ..

    [Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)

    [Python] ์ตœ์†Œํž™(MIN heap) / ์ตœ๋Œ€ํž™(MAX heap)

    ํž™์€ ์ž๋ฃŒ๊ตฌ์กฐ ํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. ํŠธ๋ฆฌ ์ค‘์—์„œ๋„ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ์ด๋‹ค. ์ตœ๋Œ€ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ ๋ถ€๋ชจ๊ฐ€ ์ž์‹๋ณด๋‹ค ๊ฐ’์ด ํฌ๋‹ค. ์ตœ์†Œ ํŠธ๋ฆฌ๋Š” ํ•ญ์ƒ ๋ถ€๋ชจ๊ฐ€ ์ž์‹๋ณด๋‹ค ๊ฐ’์ด ์ž‘๋‹ค. (์ž์‹๋ผ๋ฆฌ๋Š” ์ƒ๊ด€X) python์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒƒ์ธ๊ฐ€? ๊ณ ๋ฏผํ•  ํ•„์š” ์—†์ด module์„ ์“ฐ๋„๋ก ํ•˜๊ฒ ๋‹ค. ์ตœ์†Œ(Min) heap python์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ heap์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•œ๋‹ค. import heapq heap์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด์„ heap์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ •๋ ฌ๋˜์ง€ ์•Š์€ arr ๋ฐฐ์—ด์„ heapify๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. heapify(์ •๋ ฌํ• ๋ฆฌ์ŠคํŠธ) import heapq arr = [1,5,3,6,2] heapq.heapify(arr) print(arr) # [1,2,3,6,5..

    [Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜

    [Algorithm] LCA ์•Œ๊ณ ๋ฆฌ์ฆ˜

    LCA๋Š” "Lowest Common Ancestor" ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋ฐฑ์ค€ 3584๋ฒˆ์„ ํ’€๋ฉด์„œ ์ดํ•ดํ•ด๋ณด์žฅ www.acmicpc.net/problem/3584 3584๋ฒˆ: ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ ๋ฃจํŠธ๊ฐ€ ์žˆ๋Š” ํŠธ๋ฆฌ(rooted tree)๊ฐ€ ์ฃผ์–ด์ง€๊ณ , ๊ทธ ํŠธ๋ฆฌ ์ƒ์˜ ๋‘ ์ •์ ์ด ์ฃผ์–ด์งˆ ๋•Œ ๊ทธ๋“ค์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ(Nearest Common Anscestor)์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋‘ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์€, ๋‘ www.acmicpc.net ํ•ด๋‹น ํŠธ๋ฆฌ์—์„œ 3๋ฒˆ๊ณผ 2๋ฒˆ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ์€ 10๋ฒˆ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด a์™€b๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ์„ ์ฐพ์•„๋ณด์ž. Rule ๐Ÿ“Œ a์˜ ์กฐ์ƒ์„ ๋ชจ๋‘ ์ฐพ์•„ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ ๋‹ค. ๐Ÿ“Œ b์˜ ์กฐ..

    [Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    [Algorithm] Dijkstra ๋‹ค์ต์ŠคํŠธ๋ผ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ A์—์„œ B๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ๋จผ์ €, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง๊ด€์ ์œผ๋กœ ์‚ดํŽด๋ณด์ž ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์—์„œ A->C๋กœ ๊ฐ€๊ณ ์ž ํ•  ๋•Œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•ด๋ณด์ž. ์šฐ์„  ์ถœ๋ฐœ์ง€๋กœ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. (๋นจ๊ฐ„์ƒ‰) ๊ทธ ๋‹ค์Œ ๋…ธ๋“œ๋กœ ์ด๋™ํ•œ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค ์ค‘์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋“ค ๊ณผ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด D์˜ ๊ฑฐ๋ฆฌ๊ฐ€ 5์—์„œ 3์œผ๋กœ ๊ฐฑ์‹  ๋˜์—ˆ๋‹ค. (์ตœ๋‹จ ๊ฑฐ๋ฆฌ) C๊ฐ€ 5์—์„œ 4๋กœ ๊ฐฑ์‹ ๋˜์—ˆ๋‹ค. ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ๋„์ฐฉ์ง€๋ผ๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ฆผ์ฒ˜๋Ÿผ A->C์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” 4๊ฐ€ ๋œ๋‹ค. ์œ„์™€ ๊ฐ™์ด ๋™์ž‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๐Ÿ“Œ Rule 1. ์ถœ๋ฐœ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. 2. ๋‹ค์Œ ๋…ธ๋“œ๋กœ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ธ์ ‘ ๋…ธ๋“œ..

    [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS

    [Algorithm] ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ BFS / ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ DFS

    ๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋ ค์›Œ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜,, ์•Œ๊ณ ๋ฆฌ์ฆ˜ BFS๋Š” FIFO๋ฅผ ์›์น™์œผ๋กœ ํ•˜๋Š” Queue๋กœ ๊ตฌํ˜„ํ•œ๋‹ค. ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•˜๋Š” ์ฒซ ๋…ธ๋“œ(root)๋ฅผ queue์— ๋„ฃ๊ณ  ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค. A. queue์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค. B. ๊บผ๋‚ธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  queue์— ๋„ฃ๋Š”๋‹ค. queue์— ๋…ธ๋“œ๊ฐ€ ์—†์–ด์งˆ ๋•Œ ๊นŒ์ง€ AB๋ฐ˜๋ณต ๊ตฌํ˜„ def bfs(graph, root): visit = list() queue = [root] #AB๋ฐ˜๋ณต while queue: temp = queue.pop(0) if temp not in visit: print(temp) visit.append(temp) queue.extend(graph[temp]) ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS๋Š” LIFO๋ฅผ ์›์น™์œผ๋กœ ํ•˜๋Š” Stack์œผ๋กœ ๊ตฌํ˜„..