๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

IT ๊ณต๋ถ€91

์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (2. ๋ฒจ๋งŒ-ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜) ๐Ÿ‘ฉ‍๐Ÿ’ป ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ ์ƒ์˜ ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ์ง€๋„ ๊ฒฝ๋กœ ํƒ์ƒ‰, ๋„คํŠธ์›Œํฌ ๊ตฌ์ถ•์— ๋“œ๋Š” ๋น„์šฉ์„ ์ตœ์†Œํ™” ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. โœจ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜๋‹ค์ต์ŠคํŠธ๋ผ๋ฒจ๋งŒ-ํฌ๋“œํ”Œ๋กœ์ด๋“œ-์›Œ์…œ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ๊ฐ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„๋„ ๋‹ค๋ฅด๋‹ค. โœ๏ธ ๋ฒจ๋งŒ - ํฌ๋“œ (Ballman-Ford)์Œ์ˆ˜ ๊ฐ„์„ ์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œbut, ์Œ์ˆ˜ ์‚ฌ์ดํด์ด ์žˆ์œผ๋ฉด ์ •์ƒ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ๋งค๋ฒˆ ๋ชจ๋“  ๊ฐ„์„ ์„ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ต์ŠคํŠธ๋ผ์— ๋น„ํ•ด ๋А๋ฆผ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„ : O(VE)๋”ฐ๋ผ์„œ ์Œ์ˆ˜๊ฐ„์„ ์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋ฒจ๋งŒ-ํฌ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜์ง€๋งŒ, ์•„๋‹Œ ๊ฒฝ์šฐ๋Š” ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค.  ๐Ÿ’ซ ์Œ์ˆ˜ ๊ฐ„์„ ์ด ํฌํ•จ๋œ ๊ฐ€์ค‘๊ทธ๋ž˜ํ”„์—์„œ .. 2024. 8. 6.
์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (1. ๋‹ค์ต์ŠคํŠธ๋ผ) ๐Ÿ‘ฉ‍๐Ÿ’ป  ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€?๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„ ์ƒ์˜ ๋‘ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ์ง€๋„ ๊ฒฝ๋กœ ํƒ์ƒ‰, ๋„คํŠธ์›Œํฌ ๊ตฌ์ถ•์— ๋“œ๋Š” ๋น„์šฉ์„ ์ตœ์†Œํ™” ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. โœจ ์ตœ๋‹จ ๊ฒฝ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜๋‹ค์ต์ŠคํŠธ๋ผ๋ฒจ๋งŒ-ํฌ๋“œํ”Œ๋กœ์ด๋“œ-์›Œ์…œ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ๊ฐ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„๋„ ๋‹ค๋ฅด๋‹ค. โœ๏ธ  ๋‹ค์ต์ŠคํŠธ๋ผ (Dijkstra)์ถœ๋ฐœ์ ์—์„œ ๋ชฉํ‘œ์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๋กœ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Œ๊ฐ„์„ ์— ์Œ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.๊ทธ๋ฆฌ๋”” + DPํ˜•ํƒœ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ณต์žก๋„ : O(ElogV) ๐Ÿ’ซ ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ Flow๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋…ธ๋“œ์™€ ๊ฐ„์„  ๊ฐ€์ค‘์น˜ ์ •๋ณด๊ฐ€ ์žˆ์„๋•Œ,: A ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค... 2024. 8. 6.
๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Backtracking) ๐Ÿ‘ฉ‍๐Ÿ’ป  ๋ฐฑํŠธ๋ž˜ํ‚น (Backtracking) ์ด๋ž€?โœจ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •ํ•ด์„œ ์œ ๋งํ•˜์ง€ ์•Š์€ ์ชฝ์€ ๋” ์ด์ƒ ๊ตฌํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•(full search = brute force = ์™„์ „ ํƒ์ƒ‰)๋Œ๋‹ค๋ฆฌ๋„ ๋‘๋“œ๋ ค๋ณด๊ณ  ๊ฐ„๋‹ค! ๋ผ๋Š” ๋А๋‚Œ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ๋งŽ์ด ์ด์šฉ, DFS์™€ ๋งŽ์ด ์„ž์—ฌ ๋‚˜์˜จ๋‹ค. โœ๏ธ  ๋ฐฑํŠธ๋ž˜ํ‚น์—์„œ์˜ ์šฉ์–ด์œ ๋ง (Promising)ํ•ด๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์œ ๋งํ•˜๋‹ค๊ณ  ํ•จ๊ฐ€์ง€ ์น˜๊ธฐ (Pruning)ํ•ด๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ œ์™ธ ํ•˜๋Š” ๊ฒƒ๋ฐฑํŠธ๋ž˜ํ‚น (Backtracking)์œ ๋งํ•˜์ง€ ์•Š์€ ์ชฝ์œผ๋กœ ๊ฐ€์ง€ ์•Š๊ณ  ๋˜๋Œ์•„ ์˜ค๋Š” ๊ฒƒ โœ๏ธ  ๋ฐฑํŠธ๋ž˜ํ‚น ์˜ˆ์‹œโœจ N-Queen ๋ฌธ์ œ: N x N ์ฒด์ŠคํŒ์—์„œ ํ€ธ N๊ฐœ๋ฅผ ์„œ๋กœ ๊ณต๊ฒฉํ•  ์ˆ˜ ์—†๋„๋ก ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜(๋ฃฐ : ํ€ธ์€ ๊ฐ€๋กœ, ์„ธ.. 2024. 8. 4.
๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ โœจDP (Dynamic Programming) ๐Ÿ‘ฉ‍๐Ÿ’ป  ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (DP) ๋ž€?๋™์  ๊ณ„ํš๋ฒ•์ด๋ž€, ํฐ ๋ฌธ์ œ๋ฅผ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆˆ ํ›„ ๋‹ต์„ ์ฐพ์•„๊ฐ€๋Š” ๊ณผ์ •์—์„œ, ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๊ณ  "์žฌํ™œ์šฉ"ํ•˜๋ฉฐ ๋ฌธ์ œ์˜ ๋‹ต์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹ ์ค‘๊ฐ„ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•„์š”but, ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๋ถ€๋ถ„์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์•„ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. DP๋ฅผ ์ด์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€๋ฉด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.  โœ๏ธ  ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ์˜ ์ฐจ์ด์ ๋ถ„ํ•  ์ •๋ณต๊ณผ์˜ ์ฐจ์ด๋ถ„ํ•  ์ •๋ณต์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”๋‹ค.but, DP๋Š” ๋ถ€๋ถ„ ๋ฌธ์ œ๊ฐ€ ์ค‘๋ณต๋˜์–ด์„œ ์žฌํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ์˜ ์ฐจ์ด๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆœ๊ฐ„์˜ ์ตœ์„ ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ๊ทผ์‚ฌ์น˜์ด๋‹ค.but, DP๋Š” ๋ชจ๋“  ๋ฐฉ๋ฒ•์„ ํ™•์ธ ํ›„ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.* ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ.. 2024. 8. 2.
๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Divide and Conquer) ๐Ÿ‘ฉ‍๐Ÿ’ป  ๋ถ„ํ•  ์ •๋ณต ์ด๋ž€?ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ถ€๋ถ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.ex) ํ•ฉ๋ณ‘ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ์ด์ง„ ๊ฒ€์ƒ‰ ๋“ฑ ๋ถ„ํ•  ์ •๋ณต์˜ ๊ณผ์ •์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.๋ฌธ์ œ๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ž‘์€ ๋ถ€๋ถ„๋“ค๋กœ ๋ถ„ํ•  ํ•œ๋‹ค.๋ถ€๋ถ„๋“ค์„ ๊ฐ๊ฐ ์ •๋ณตํ•œ๋‹ค.๋ถ€๋ถ„๋“ค์˜ ํ•ด๋‹ต์„ ํ†ตํ•ฉํ•˜์—ฌ ์›๋ž˜ ๋ฌธ์ œ์˜ ๋‹ต์„ ๊ตฌํ•œ๋‹ค. โœ๏ธ ๋ถ„ํ•  ์ •๋ณต์˜ ์žฅ ๋‹จ์ ์žฅ์  : ๋ฌธ์ œ๋ฅผ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋ฉฐ ์–ด๋ ค์šด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์— ์ด์ ์ด ์žˆ์Œ (์„œ๋กœ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๊ณ , ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์‹ฑ์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ)๋‹จ์ :๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ(์žฌ๊ท€ ํ˜ธ์ถœ ๊ตฌ์กฐ) โœ๏ธ ๋ถ„ํ•  ์ •๋ณต ์˜ˆ์‹œ๊ณ„์† ๋ฐ˜์œผ๋กœ ์ž˜๋ผ๊ฐ€๋ฉฐ ๋ชจ๋‘ ๋ถ„ํ• ์ด ๋˜๋ฉด ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ’์„ ์ฐพ๊ณ  ์žฌ๊ท€์ ์œผ๋กœ ์ตœ์ข… ๋‹ต์„ ์ฐพ์•„๊ฐ„๋‹ค.public static int getMax(int[] arr, int left, int right){ in.. 2024. 8. 2.
๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy Algorithm) ๐Ÿ‘ฉ‍๐Ÿ’ป  ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy Algorithm) ์ด๋ž€?๋งค ์ˆœ๊ฐ„ ํ˜„์žฌ ๊ธฐ์ค€์œผ๋กœ ์ตœ์„ ์˜ ๋‹ต์„ ์„ ํƒํ•ด ๋‚˜๊ฐ€๋Š” ๊ธฐ๋ฒ•๋น ๋ฅด๊ฒŒ ๊ทผ์‚ฌ์น˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ตœ์ ํ•ด๊ฐ€ ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค. โœ๏ธ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์˜ˆ์‹œ1) Activity Select ProblemN๊ฐœ์˜ ํ™œ๋™๊ณผ ๊ฐ ํ™œ๋™์˜ ์‹œ์ž‘/ ์ข…๋ฃŒ ์‹œ๊ฐ„์ด ์ฃผ์–ด์กŒ์„ ๋•Œ,ํ•œ ์‚ฌ๋žŒ์ด ์ตœ๋Œ€ํ•œ ๋งŽ์ด ํ•  ์ˆ˜ ์žˆ๋Š” ํ™œ๋™์˜ ์ˆ˜ ๊ตฌํ•˜๊ธฐ: ๋งค ์ˆœ๊ฐ„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ์ค‘์— ์ตœ์„ ์„ ์„ ํƒ!  โœจbut, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ญ์ƒ ์ตœ์ ํ•ด๋ฅผ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ์•„๋ž˜์˜ ์‚ฌ์ง„์ด ๊ทธ ์˜ˆ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ ์šฉ ์กฐ๊ฑด์„ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.  โœ๏ธ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ ์กฐ๊ฑด๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋น ๋ฅด์ง€๋งŒ, ์ตœ์ ํ•ด๋ฅผ ๋ณด์žฅํ•˜์ง€๋Š” ๋ชปํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ์šฐ ์ ์šฉ.. 2024. 7. 20.