728x90

Algorithm/๐Ÿ“š Concept

    [์ž๋ฃŒ๊ตฌ์กฐ] ๋‹จ์ˆœ/์›ํ˜•/์ด์ค‘ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List) ๊ตฌํ˜„ - ํŒŒ์ด์ฌ(Python)

    ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ(Linked List) ๋‹ค์Œ ์ˆœ์„œ์˜ ์ž๋ฃŒ๊ฐ€ ์žˆ๋Š” ์œ„์น˜๋ฅผ ๋ฐ์ดํ„ฐ์— ํฌํ•จ์‹œํ‚ค๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋Š” Node๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , Node ์•ˆ์—๋Š” Data์™€ Link(Next)๋กœ ๊ตฌ์„ฑ Data: ๋ฐ์ดํ„ฐ ๊ฐ’ ์ €์žฅ Link(Next): ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ด ์žฅ์  ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€, ์‚ญ์ œ์— ์œ ๋ฆฌ ๋ฐฐ์—ด: ์‹œ๊ฐ„๋ณต์žก๋„ O(n) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ: ์‹œ๊ฐ„๋ณต์žก๋„ O(1) ๊ณต๊ฐ„๋ณต์žก๋„ ์ธก๋ฉด์—์„œ ์œ ๋ฆฌ (๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ์†๋œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ํ•„์š” ์‹œ์—๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์  ํ• ๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ) ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ X ์œ ์—ฐํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋‹จ์  ๋ฐ์ดํ„ฐ ํƒ์ƒ‰ ์‹œ ๋ถˆ๋ฆฌ (๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ์™€ ๋ฌผ๋ฆฌ์  ์ €์žฅ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ์•„๋‹Œ ์ „์ฒด๋ฅผ ์ˆœํšŒํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ) ๋ฐฐ์—ด: ์‹œ๊ฐ„๋ณต์žก๋„ O(1) ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ: ์‹œ๊ฐ„๋ณต์žก๋„ O..

    [์ž๋ฃŒ๊ตฌ์กฐ] ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue/Heapq) ๊ตฌํ˜„ - ํŒŒ์ด์ฌ(Python)

    ์šฐ์„ ์ˆœ์œ„ ํ๋ž€? ์šฐ์„ ์ˆœ์œ„ ํ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ํ์™€ ๋‹ฌ๋ฆฌ, ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์€ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์ฒ˜๋ฆฌ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ, ํž™(Heap)์œผ๋กœ ๋ชจ๋‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ์ ์€ ํž™(Heap)์„ ์‚ฌ์šฉํ•œ๋‹ค. ํž™(Heap) ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค. ํž™์€ ์ตœ์†Œ ํž™๊ณผ ์ตœ๋Œ€ ํž™์œผ๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ตœ์†Œ ํž™: ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ํ•ญ์ƒ ๋ถ€๋ชจ๋…ธ๋“œ๋Š” ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง - ์ตœ๋Œ€ ํž™: ๋ฃจํŠธ๋…ธ๋“œ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋ฉฐ, ํ•ญ์ƒ ๋ถ€๋ชจ๋…ธ๋“œ๋Š” ์ž์‹๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง ์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌํ˜„ (ํŒŒ์ด์ฌ) - PriorityQueue from queue import PriorityQueue ..

    [์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ •๋ ฌ(sort/sorted) - ํŒŒ์ด์ฌ(Python)

    โ—ˆ sort - ๋ฆฌ์ŠคํŠธ.sort() - ๋ฐ˜ํ™˜ ๊ฐ’ ์—†์ด ์˜ค๋ฆ„์ฐจ์ˆœ(๊ธฐ๋ณธ๊ฐ’)์œผ๋กœ ์ •๋ ฌ - ์›๋ž˜์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ •๋ ฌ๋œ ๊ฐ’์œผ๋กœ ๋ณ€ํ˜• array = [5, 2, 4, 3, 1] array.sort() print(array) # [1, 2, 3, 4, 5] โ—ˆ sorted - sorted(๋ฆฌ์ŠคํŠธ) - ์˜ค๋ฆ„์ฐจ์ˆœ(๊ธฐ๋ณธ๊ฐ’)์œผ๋กœ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ ๋ฐ˜ํ™˜ - ์›๋ž˜์˜ ๋ฆฌ์ŠคํŠธ๋Š” ๋ณ€ํ˜• X array = [5, 2, 4, 3, 1] sorted_array = sorted(array) print(sorted_array) # [1, 2, 3, 4, 5] parameter 1. reverse - ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ array.sort(reverse=True) # [5, 4, 3, 2, 1] sorted_array = sorted(array, rever..

    [์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฒ”์œ„๋ฅผ ๋ฐ˜์”ฉ ์ขํ˜€๊ฐ€๋Š” ์ด์ง„ ํƒ์ƒ‰ - ํŒŒ์ด์ฌ(Python)

    ์ˆœ์ฐจ ํƒ์ƒ‰ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์žˆ๋Š” ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์•ž์—์„œ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐจ๋ก€๋Œ€๋กœ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ถ€ํ„ฐ ์ฐพ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์ผ์น˜ํ•˜๋ฉด ํƒ์ƒ‰ ์ข…๋ฃŒ, ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ ์›์†Œ๋กœ ์ด๋™ํ•œ๋‹ค. # ์ˆœ์ฐจ ํƒ์ƒ‰ def sequential_search(n, target, array): for i in range(n): if array[i] == target: return i+1 # ํ˜„์žฌ ์œ„์น˜ ๋ฐ˜ํ™˜ (-๋ฒˆ์งธ) array = ['S', 'T', 'A', 'R'] # ์ž„์˜ ์ง€์ • ๋ฆฌ์ŠคํŠธ print("๋ฆฌ์ŠคํŠธ ์† A์˜ ์œ„์น˜๋Š” " + sequential_search(len(array), 'A', array) + "์ž…๋‹ˆ๋‹ค.") # ํƒ์ƒ‰ ๊ฒฐ๊ณผ ์ถœ๋ ฅ ์ด์ง„ ํƒ์ƒ‰ ๋ฆฌ์ŠคํŠธ ๋‚ด์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ..

    [์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ DFS์™€ BFS - ํŒŒ์ด์ฌ(Python)

    ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ๊ทธ๋ž˜ํ”„๋Š” ๋…ธ๋“œ(Node)์™€ ๊ฐ„์„ (Edge)๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด๋•Œ ๋…ธ๋“œ๋ฅผ ์ •์ (Vertex)๋ผ๊ณ ๋„ ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ทธ๋ž˜ํ”„๋Š” '์ธ์ ‘ ํ–‰๋ ฌ'๊ณผ '์ธ์ ‘ ๋ฆฌ์ŠคํŠธ' 2๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ์ ‘ ํ–‰๋ ฌ : 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ - ๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ์ €์žฅ INF = 999999999 # ๋ฌดํ•œ์˜ ๋น„์šฉ ์„ ์–ธ # 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„ graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] print(graph) ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ : ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ - ๋ชจ๋“  ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ ์ €์žฅ # ํ–‰์ด 3๊ฐœ์ธ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„ graph = [[] for _..

    [์ž๋ฃŒ๊ตฌ์กฐ] ์Šคํƒ(Stack)๊ณผ ํ(Queue) - ํŒŒ์ด์ฌ(Python)

    ์Šคํƒ(Stack) ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๋นผ๋Š” ํ›„์ž…์„ ์ถœ(LIFO - Last In First Out) ๊ตฌ์กฐ ex) ๋ฐ•์Šค ์Œ“๊ธฐ, ํŠธ๋Ÿญ์— ๋ฌผ๊ฑด ๋„ฃ๊ธฐ ํŒŒ์ด์ฌ ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ append()์™€ pop() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ stack = [] stack.append(1) # stack: [1] stack.append(2) # stack: [1, 2] stack.append(3) # stack: [1, 2, 3] stack.append(4) # stack: [1, 2, 3, 4] stack.pop() # stack: [1, 2, 3] stack.pop() # stack: [1, 2] stack.append(3) # stack: [1, 2, 3] stack.pop() # stack: [1, 2] ํ(Queu..

728x90