๋ชฉ๋ก์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ (8)

๐Ÿ’ป

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ - Dynamic Programming

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming) => ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์„œ ํ‘ธ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ฐ ๋ฌธ์ œ๋Š” ํ•œ ๋ฒˆ๋งŒ ํ’€์–ด์•ผ ํ•œ๋‹ค. Optimal Substructure ๋ฅผ ๋งŒ์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ™์€ ๋ฌธ์ œ๋Š” ๊ตฌํ•  ๋•Œ๋งˆ๋‹ค ์ •๋‹ต์ด ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ, ์ •๋‹ต์„ ํ•œ ๋ฒˆ ๊ตฌํ–ˆ์œผ๋ฉด ์–ด๋”˜๊ฐ€์— ๋ฉ”๋ชจํ•ด๋†“๋Š”๋‹ค. ์ด๋Ÿฐ ๋ฉ”๋ชจํ•˜๋Š” ๊ฒƒ์„ ์ฝ”๋“œ์˜ ๊ตฌํ˜„์—์„œ๋Š” ๋ฐฐ์—ด์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”๋ชจ๋ฅผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ ์˜์–ด๋กœ Memoization ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋‘ ๊ฐ€์ง€ ์†์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค. 1. Overlapping Subproblem (๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ ์„œ ํ‘ธ๋Š”๋ฐ, ์ด๋•Œ ๋ฌธ์ œ๋“ค๋ผ๋ฆฌ ๊ฒน์ณ์•ผํ•œ๋‹ค.) ํฐ ๋ฌธ์ œ์™€ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] [์ตœ๋‹จ๊ฑฐ๋ฆฌ ์™„์ „์ •๋ณต] ๋‹ค์ต์ŠคํŠธ๋ผ - ์ตœ์†Œ๋น„์šฉ๊ตฌํ•˜๊ธฐ

๋‹ค์ต์ŠคํŠธ๋ผ if(dist[to] > dist[from] + cost){ dist[to] = dist[from] + cost; } - D[i] = ์‹œ์ž‘ -> i ๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ - C[i] = i๊ฐ€ ์ฒดํฌ๋˜์–ด ์žˆ์œผ๋ฉด true, ์•„๋‹ˆ๋ฉด false 1. ์ฒดํฌ๋˜์–ด ์žˆ์ง€ ์•Š๋Š” ์ •์  ์ค‘์—์„œ D์˜ ๊ฐ’์ด ๊ฐ€์žฅ ์ž‘์€ ์ •์  x๋ฅผ ์„ ํƒํ•œ๋‹ค. 2. x๋ฅผ ์ฒดํฌํ•œ๋‹ค. 3. x์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ ์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ๊ฐ„์„ ์„ (x,y,z)๋ผ๊ณ  ํ–ˆ์„ ๋•Œ d[y] > d[x] + z ์ด๋ฉด ๊ฐฑ์‹ ํ•ด์ค€๋‹ค. 1, 2, 3๋‹จ๊ณ„๋ฅผ ๋ชจ๋“  ์ •์ ์„ ์ฒดํฌํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•œ๋‹ค. - ๋ชจ๋“ ์ •์  ์„ ํƒํ•˜๋ฏ€๋กœ(V-1) X ์„ ํƒ์„ ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ O(V) = O(V^2) ์ธ์ ‘ํ–‰๋ ฌ์„ ์ด์šฉํ•œ ๊ตฌํ˜„ for(int i=1; i

[์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํƒ์ƒ‰

์ด์ „๊ธ€ ) 2020/02/29 - [์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ] - [์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ [์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„ ์–ด๋Š์ •๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ๋ชจ๋“  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์— ๊ฑฐ์˜ ๋‹จ๊ณจ๋กœ ์ถœ์ œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ DFS, BFS ์ด๋‹ค. ๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋‚˜๋ฅผ ํž˜๋“ค๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ๋„ ๋ฐ”๋กœ DFS์™€BFS!! ๊ทธ๋ž˜์„œ ๋‚˜.. hyonee.tistory.com 2. ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ DFS:๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ -> ์ตœ๋Œ€ํ•œ ๊นŠ์ˆ™ํžˆ ๋งŽ์ด BFS:๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ -> ์ตœ๋Œ€ํ•œ ๋„“๊ฒŒ ๊ฐ€๋Š” ๊ฒƒ ๋ชจ๋“ ๊ฐ€์ค‘์น˜๊ฐ€ 1์ธ๊ฒฝ์šฐ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ํƒ์ƒ‰ - ์œ„์˜ 2๊ฐ€์ง€ ํƒ์ƒ‰ ๋ชจ๋‘ ๋ชฉ์ ์€ ๋ชจ๋“  ์ •์ ์„ 1๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒƒ DFS - ์Šคํƒ์„ ์ด์šฉํ•ด์„œ ๊ฐˆ ์ˆ˜ ์žˆ์„ ๋งŒํผ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ๊ฐ€๊ณ  ๊ฐˆ ์ˆ˜ ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜][DFS์™€BFS ์™„์ „์ •๋ณต] ๊ทธ๋ž˜ํ”„์˜ ํ‘œํ˜„

์–ด๋Š์ •๋„ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด๋ฅผ ํ•ด ๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ๋ชจ๋“  ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์— ๊ฑฐ์˜ ๋‹จ๊ณจ๋กœ ์ถœ์ œ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ DFS, BFS ์ด๋‹ค. ๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด๋ฅผ ํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๋‚˜๋ฅผ ํž˜๋“ค๊ฒŒ ํ–ˆ๋˜ ๊ฒƒ๋„ ๋ฐ”๋กœ DFS์™€BFS!! ๊ทธ๋ž˜์„œ ๋‚˜์™€ ๊ฐ™์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œํ’€์ด ์ƒˆ๋‚ด๊ธฐ ์™•์ดˆ๋ณด๋“ค์„ ์œ„ํ•ด ์™„์ „ ์ •๋ณต์ด๋ผ๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋กœ ์˜ฌ๋ฆฌ๊ณ ์ž ํ•œ๋‹ค. ๊ธ€์„ ์“ฐ๋ฉด์„œ ๋‚˜๋„ ๊ณต๋ถ€ํ•˜๊ณ , ์ž๋ฃŒ๊ฐ€ ๋ถ€๋”” ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์ž…๋‹ˆ๋‹ค :) 1. ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„ ์ธ์ ‘ ํ–‰๋ ฌ - ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ผ ๋•Œ A[i][j], A[j][i] - ์ธ์ ‘ ํ–‰๋ ฌ์€ ์—†๋Š” ๊ฐ„์„ ๋„ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š๋Š”๋‹ค. ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. - ์ธ์ ‘ ํ–‰๋ ฌ์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(V^2)์ด๋‹ค. ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ) #include #include int a[10][10]; int m..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Greedy Algorithm

ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ์–ด๋–ค ์„ ํƒ์„ ํ•ด์•ผํ•  ๋•Œ ๊ทธ ๋‹น์‹œ์— ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค. - ์ˆœ๊ฐ„์˜ ์„ ํƒ์€ ๊ทธ ๋‹น์‹œ์˜ ์ตœ์ ์˜ ์„ ํƒ์ด๋‹ค. ์ด๋Ÿฐ ์„ ํƒ๋“ค์ด ๋ชจ์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์„ ์–ป๋Š”๋‹ค๊ณ  ํ•˜์—ฌ ์ตœ์ข… ํ•ด๋‹ต์ด ์ตœ์ ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค. ๋”ฐ๋ผ์„œ, ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ด๋‹ต์„ ์–ป์€ ํ›„์— ์ด ํ•ด๋‹ต์ด ์ตœ์ ์ธ์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค. - ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ์ ˆ์ฐจ 1๋‹จ๊ณ„) ์„ ์ •๊ณผ์ •(selection procedure) : ํ˜„์žฌ ์ƒํƒœ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ํ•ด๋‹ต์„ ์ฐพ์•„์„œ ํ•ด๋‹ต๋ชจ์Œ(solution set)์— ํฌํ•จ์‹œํ‚จ๋‹ค. 2๋‹จ๊ณ„) ์ ์ •์„ฑ๊ฒ€์‚ฌ(feasibility test) : ์ƒˆ๋กœ ์–ป์€ ํ•ด๋‹ต๋ชจ์Œ์ด ์ ์ ˆํ•œ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 3๋‹จ๊ณ„) ํ•ด๋‹ต ๊ฒ€์‚ฌ(solution check) : ์ƒˆ๋กœ ์–ป์€ ํ•ด๋‹ต๋ชจ์Œ์ด ์ตœ์ ์˜ ํ•ด์ธ์ง€ ๊ฒฐ์ •ํ•œ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ด๋ถ„ ํƒ์ƒ‰(์ด์ง„ํƒ์ƒ‰) - BinarySearch

์ด๋ถ„ ํƒ์ƒ‰(์ด์ง„ํƒ์ƒ‰) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์€ ์ฐพ์„ ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ ์„œ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ฒ˜์Œ ์ค‘๊ฐ„์˜ ๊ฐ’์„ ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ์„ ํƒํ•˜์—ฌ, ๊ทธ ๊ฐ’๊ณผ ํ‚ค๊ฐ’์˜ ํฌ๊ณ  ์ž‘์Œ์„ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฒ˜์Œ ์„ ํƒํ•œ ์ค‘๊ฐ„๊ฐ’์ด ๋งŒ์•ฝ ์ฐพ๋Š” ๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์ตœ๋Œ“๊ฐ’์ด ๋˜๊ณ , ์ž‘์œผ๋ฉด ์ตœ์†Ÿ๊ฐ’์ด ๋œ๋‹ค. - ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์†ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. - ๋‹จ, ์ด๋ฏธ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ์ฐพ์œผ๋ ค๋Š” ํ‚ค๊ฐ’์ด ๋ฐฐ์—ด์— ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ์ด๋‹ค. - ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(logN) ์ด๋‹ค. ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ int BinarySearch(int arr[], int length, int key){ int first = 0; int last = length - 1; int mid = 0; while(first key){ // ์ค‘๊ฐ„๊ฐ’์ด ์ฐพ์œผ๋ ค..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ถ„ํ• ์ •๋ณต - Divide and Conquer

๋ถ„ํ•  ์ •๋ณต๋ฒ•์ด๋ž€? ๋ฌธ์ œ์˜ ์‚ฌ๋ก€๋ฅผ 2๊ฐœ ์ด์ƒ์˜ ๋” ์ž‘์€ ์‚ฌ๋ก€๋กœ ๋‚˜๋ˆ„์–ด(divide) ๊ฐ ์ž‘์€ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ํ•ด๋‹ต(conquer)์„ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉด ์ด๋“ค์˜ ํ•ด๋‹ต์„ ๊ฒฐํ•ฉ(combine)ํ•˜์—ฌ ์›๋ฌธ์ œ์˜ ํ•ด๋‹ต์„ ์–ป๋Š” ๋ฐฉ์‹. - ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์€ ํ•ด๋‹ต์„ ์‰ฝ๊ฒŒ ์–ป์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ ์šฉํ•œ๋‹ค. - ํ•˜ํ–ฅ์‹(top-down) ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ถ„ํ• (Divide) : ํ•ด๊ฒฐํ•˜๊ธฐ ์‰ฝ๋„๋ก ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. ์ •๋ณต(Conquer): ๋‚˜๋ˆˆ ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๊ฐ๊ฐ ํ•ด๊ฒฐํ•œ๋‹ค. ํ†ตํ•ฉ(Combine): (ํ•„์š”ํ•˜๋‹ค๋ฉด) ํ•ด๊ฒฐ๋œ ํ•ด๋‹ต์„ ๋ชจ์€๋‹ค. - ๋ณดํ†ต ์žฌ๊ท€ ํ”„๋กœ์‹œ์ €๋กœ ๋จผ์ € ํ•ด๊ฒฐํ•œ ๋‹ค์Œ์— ๋ณด๋‹ค ํšจ์œจ์ ์ธ ๋ฐ˜๋ณต ํ”„๋กœ์‹œ์ €๊ฐ€ ์—†๋Š”์ง€ ๊ฒ€ํ† ํ•œ๋‹ค. - ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์ง„ ๊ฒ€์ƒ‰(BinarySearch) ํ•ฉ๋ณ‘ ์ •๋ ฌ(MergeSort) ..