๐Ÿ“š Study/Algorithm 6

[Algorithm] ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ DFS, BFS

# ๊ทธ๋ž˜ํ”„์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ: ๋…ธ๋“œNode์™€ ๊ฐ„์„ Edge๋กœ ํ‘œํ˜„๋˜๋ฉฐ ์ด๋•Œ ๋…ธ๋“œ๋ฅผ ์ •์ Vertex๋ผ๊ณ ๋„ ๋งํ•œ๋‹ค.๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ธ์ ‘ํ–‰๋ ฌ(Adjacency Matrix): 2์ฐจ์› ๋ฐฐ์—ด๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„ ํ‘œํ˜„์ธ์ ‘๋ฆฌ์ŠคํŠธ(Adjacency List): ๋ฆฌ์ŠคํŠธ๋กœ ๊ทธ๋ž˜ํ”„์˜ ์—ฐ๊ฒฐ๊ด€๊ณ„ ํ‘œํ˜„ ์ธ์ ‘ํ–‰๋ ฌAdjacency MatrixINF = 1e7 # ๋ฌดํ•œ์˜ ๋น„์šฉ ์„ ์–ธ# 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์ธ์ ‘ ํ–‰๋ ฌ ํ‘œํ˜„graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0]]print(graph)์ธ์ ‘๋ฆฌ์ŠคํŠธ(Adjacency List)# ํ–‰(Row)์ด 3๊ฐœ์ธ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ํ‘œํ˜„graph = [[] for _ in range(3)]# ๋…ธ๋“œ 0์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ •๋ณด ์ €์žฅgraph[0]...

[Algorithm] ์ตœ๋‹จ ๊ฒฝ๋กœ

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

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

์ค‘๋ณต๋˜๋Š” ์—ฐ์‚ฐ์„ ์ค„์ด์ž์ปดํ“จํ„ฐ๋Š” ์—ฐ์‚ฐ ์†๋„์— ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋„ ํ•œ์ •์ ์ด๋‹ค.๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์—ฐ์‚ฐ ์†๋„์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์ˆ˜์ ์ด๋‹ค.ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ '๋‹ค์ด๋‚˜๋ฏน'์ด๋ž€, 'ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋„์ค‘์—'๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค. (ex. ๋™์ ํ• ๋‹น)๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด์™€ ๊ด€๋ จ์ด ์—†๋‹ค. # ์˜ˆ์‹œ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด ์žˆ๋‹ค. $$a_n = a_{n-1} + a_{n-2}, a_1 = 1, a_2 = 1$$ ๊ทธ๋Ÿผ, ์ฝ”๋“œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ?๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฐ”๋กœ ์žฌ๊ท€ํ•จ์ˆ˜์ผ ๊ฒƒ์ด๋‹ค.  ๊ทธ๋Ÿฌ๋‚˜ ์ฝ”๋“œ๋ฅผ ์ด์™€ ๊ฐ™์ด ์งœ๋ฉด ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.๋ฐ”๋กœ n์ด ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๊ธฐ..

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

# 1. ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ์„ ํƒํ•˜๋Š” ๊ทธ๋ฆฌ๋””๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜: ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋œป์€, 'ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ์ง€๊ธˆ ๋‹น์žฅ ์ข‹์€ ๊ฒƒ๋งŒ ๊ณ ๋ฅด๋Š” ๋ฐฉ๋ฒ•'์„ ์˜๋ฏธํ•œ๋‹ค.๋”ฐ๋ผ์„œ, ๋งค์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๊ฒŒ ๋˜๋ฉฐ, ํ˜„์žฌ์˜ ์„ ํƒ์ด ๋ฏธ๋ž˜์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.๋”ฐ๋ผ์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ '์ •๋‹น์„ฑ ๋ถ„์„'์ด ์ค‘์š”ํ•˜๋‹ค.๋‹จ์ˆœํžˆ ํ˜„์žฌ best๋ฅผ ์„ ํƒํ•ด๋„ ๊ทธ๊ฒŒ ์ตœ์ ์˜ ํ•ด๊ฐ€ ๋˜๋Š”์ง€ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ์†Œ๋ฆฌ์ด๋‹ค! ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฌธ์ œ์œ ํ˜•์€'์‚ฌ์ „์— ์™ธ์šฐ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ ์œ ํ˜•'์ด๋‹ค.๋ฐ˜๋ฉด ์ดํ›„์— ๊ณต๋ถ€ํ•  ์ •๋ ฌ, ์ตœ๋‹จ ๊ฒฝ๋กœ ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•์€์ด๋ฏธ ๊ทธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์„ ์ •ํ™•ํ•˜๊ฒŒ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.๋˜ํ•œ, ๊ทธ๋ฆฌ๋””๋Š” ๊ธฐ์ค€์— ๋”ฐ๋ผ ์ข‹์€ ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฏ€๋กœ๋ฌธ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] 2์ฃผ์ฐจ ๊ฐ•์˜ | ์šฐ์„ ์ˆœ์œ„ ํ ADT, ์ œ์ž๋ฆฌ ์„ ํƒ์ •๋ ฌ, ์ œ์ž๋ฆฌ ์‚ฝ์ž…์ •๋ ฌ

โœ… ์šฐ์„ ์ˆœ์œ„ ํ ADT ์šฐํŽธ๋ฐฐ๋‹ฌ๋ถ€: ์šฐ์ฒด๊ตญ์—์„œ ๊ทธ๋‚  ๋ฐฐ๋‹ฌํ•ด์•ผ ํ•  ์šฐํŽธ๋ฌผ๋“ค์„ ๊ฐ€๋ฐฉ์— ๋„ฃ์–ด ์šฐ์ฒด๊ตญ์„ ์ถœ๋ฐœํ•ด์„œ ๋ฐฐ๋‹ฌ์ฒ˜๋ฅผ ๋Œ๋ฉฐ ๋ฐฐ๋‹ฌํ•จ ๋ฐฐ๋‹ฌ๋ถ€A: ์šฐ์ฒด๊ตญ์—์„œ ๊ฐ€๋ฐฉ์— ์šฐํŽธ๋ฌผ์„ ๋‹ด์„ ๋•Œ ์•„๋ฌด๋ ‡๊ฒŒ (fast), ๋ฐฐ๋‹ฌ ๊ณผ์ •์—์„œ๋Š” ๊ทธ๋•Œ๊ทธ๋–„์˜ ๋ฐฐ๋‹ฌ์ฒ˜์— ๋งž๋Š” ์šฐํŽธ๋ฌผ์„ ์ฐพ์•„์•ผ ํ•˜๋‹ˆ๊นŒ ์‹œ๊ฐ„ ๊ฑธ๋ฆผ (slow) ๋ฐฐ๋‹ฌ๋ถ€B: ์šฐ์ฒด๊ตญ์—์„œ ๊ฐ€๋ฐฉ์— ์šฐํŽธ๋ฌผ์„ ๋‹ด์„ ๋•Œ ๋ฐฐ๋‹ฌ์ฒ˜ ์ฃผ์†Œ ์ˆœ์„œ๋Œ€๋กœ ์ฐจ๊ณก์ฐจ๊ณก (slow), ๋ฐฐ๋‹ฌ ๊ณผ์ •์—์„œ๋Š” ์ฐจ๋ก€๋กœ ๊บผ๋‚ด๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ์ ˆ์•ฝ (fast) ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋กœ๋Š”, ๊ฑฐ๋‘ฌ๋“ค์ธ ์‹œํ—˜ ๋‹ต์•ˆ์ง€ 100์žฅ์„ ํ•™๋ฒˆ ์ˆœ์„œ๋Œ€๋กœ ์ ์ˆ˜ํ‘œ์— ์ž…๋ ฅํ•œ๋‹ค๊ณ  ํ•  ๋•Œ ๊ต์ˆ˜A: ๋‹ต์•ˆ์ง€ ๋”๋ฏธ์— ๋†“์ธ ์ˆœ์„œ๋Œ€๋กœ ์ฑ„์ (fast), ์ฑ„์ ์™„๋ฃŒ๋œ ๋‹ต์•ˆ์ง€ ๋”๋ฏธ์—์„œ ํ•™๋ฒˆ ์ˆœ์„œ๋Œ€๋กœ ์ฐพ์•„๋‚ด ์ ์ˆ˜ํ‘œ์— ์ž…๋ ฅํ•จ (slow) ๊ต์ˆ˜B: ์ฑ„์ ์„ ๋งˆ์นœ ๋‹ต์•ˆ์ง€๋ฅผ ํ•™๋ฒˆ ์ˆœ์œผ๋กœ ์Œ“๊ณ ..