[์•Œ๊ณ ๋ฆฌ์ฆ˜] Dynamic Programming(๋™์  ๊ณ„ํš๋ฒ•)
ยท
Algorithm/KBro Study
1. DP๋ž€? DP(Dynamic Programming)์€ ํ•˜๋‚˜์˜ ํฐ ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ๋‹ค์‹œ ํฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์ด๋ฏธ ํ–ˆ๋˜ ์—ฐ์‚ฐ์ด ๋ฐ˜๋ณต๋˜๋Š” ๊ฒฐ์ ์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€ ๋ฐฉ์‹๋„ DP์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ์žฌ๊ท€ ๋ฐฉ์‹์€ ๋™์ผํ•œ ์ž‘์€ ๋ฌธ์ œ๋“ค์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณต๋˜์–ด ๋น„ํšจ์œจ์ ์ธ ๊ณ„์‚ฐ์ด ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. Dynamic Programming ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” Top-Down๊ณผ Bottop-Up ๋ฐฉ์‹์ด ์žˆ๋Š”๋ฐ, ์•„๋ž˜์—์„œ ์•Œ์•„๋ณด๊ฒ ๋‹ค. 2. Dynamic Programming ๊ตฌํ˜„ 2-1 Top-Down ๋ฐฉ์‹ Top-Down ๋ฐฉ์‹์ด๋ž€ ์žฌ๊ท€ ํ•จ์ˆ˜๋กœ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, ๋ง ๊ทธ๋Œ€๋กœ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Bellman-Ford)
ยท
Algorithm/KBro Study
1. ๋ฒจ๋งŒํฌ๋“œ(Bellman-Ford) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ํ•œ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋…ธ๋“œ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ + ์Œ์ˆ˜ ์‚ฌ์ดํด ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ ๋‹ค์ต์ŠคํŠธ๋ผ์™€๋Š” ๋‹ฌ๋ฆฌ ๊ฐ€์ค‘์น˜์— ์Œ์ˆ˜๊ฐ€ ์žˆ์–ด๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ ์‹œ๊ฐ„๋ณต์žก๋„: O(NE) (N:๋…ธ๋“œ์˜ ์ˆ˜, E:์—ฃ์ง€์˜ ์ˆ˜) ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ๋…ธ๋“œ 1์—์„œ ๋ชจ๋“  ๋…ธ๋“œ๋กœ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋ฉด 1 -> 2 = 1 1 -> 2 ->3 = 2 1-> 2 ->3 ->4 = 4 ๊ฐ€ ๋˜๊ณ  ๋…ธ๋“œ 2๋Š” ์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 4 ->2 ๊ฒฝ๋กœ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์Œ ๊ฒฐ๊ณผ์ ์œผ๋กœ 1 -> 2์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” 1์ด ๋จ ํ•˜์ง€๋งŒ ์‹ค์ œ 1 -> 2์˜ ์ตœ๋‹จ๊ฒฝ๋กœ๋Š” -โˆž ์ž„ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฒจ๋งŒํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํƒ„์ƒ 2. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ์›๋ฆฌ ์‹œ์ž‘ ์ •์ ์„ ์„ ํƒํ•œ๋‹ค. ๋ชจ๋“  ๊ฐ„์„ ๋“ค์„ ํƒ์ƒ‰ํ•˜๋ฉด์„œ..
[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” - ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ(Minimum Spanning Tree)
ยท
Algorithm/KBro Study
๊ทธ๋ฆฌ๋””(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ, ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์•Œ์•„๋ณด์ž. ๊ทธ๋ฆฌ๋””(ํƒ์š•) ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ž€? => ๋งค ์„ ํƒ์—์„œ ์ง€๊ธˆ ์ด ์ˆœ๊ฐ„ ๋‹น์žฅ ์ตœ์ ์ธ ๋‹ต์„ ์„ ํƒํ•˜์—ฌ ์ ํ•ฉํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. = ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋น ๋ฅด์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์ ์ธ ๋‹ต์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค. Union-Find ์•Œ๊ณ ๋ฆฌ์ฆ˜ Disjoint-set(์„œ๋กœ์†Œ ์ง‘ํ•ฉ)์„ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ex) {1,2} {3,4} โ†’ ์„œ๋กœ์†Œ, {1,2} {2,3} โ†’ ์„œ๋กœ์†Œ ์•„๋‹˜ (1). Union 2๊ฐœ ์›์†Œ๋กœ ์ด๋ฃจ์–ด์ง„ ์ง‘ํ•ฉ์„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ํ•ฉ์น˜๊ธฐ ex) {1} + {2} โ†’ {1,2} (2). Find ํŠน์ • ์›์†Œ๊ฐ€ ์†ํ•œ ์ง‘ํ•ฉ์ด ๋ญ”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์—ฐ์‚ฐ ex) Find({ {1,2,3}, {4,5}, {10} }, 2) โ†’ {1,2..
Java) 2์ฐจ์› ๋ฐฐ์—ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ(Arrays.sort ๋žŒ๋‹ค์‹)
ยท
Languages | Frameworks/Java
Java Array Sort ์ž๋ฐ”์—์„œ 1์ฐจ์› ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” Arrays.sort() ๋ฉ”์„œ๋“œ์— ์ธ์ž๋กœ ๋ฐฐ์—ด์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, 2์ฐจ์› ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ ํ•˜๋ ค๋ฉด Arrays.sort์—์„œ ๋žŒ๋‹ค์‹์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. 1์ฐจ์› ๋ฐฐ์—ด(int) ์ •๋ ฌ - ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์—ฌ๊ธฐ์„œ ์ž ๊น 1์ฐจ์› ๋ฐฐ์—ด(์ •์ˆ˜ํ˜•) ์˜ค๋ฆ„์ฐจ์ˆœ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฝ”๋“œ๋กœ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด์ž. # ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ int[] arr = {1, 26, 17, 25, 99, 44, 303}; Arrays.sort(arr); >>>>>๊ฒฐ๊ณผ: [1, 17, 25, 26, 44, 99, 303] 1์ฐจ์› intํ˜• ๋ฐฐ์—ด์˜ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ์€ ์ƒ๋‹นํžˆ ๊นŒ๋‹ค๋กญ๋‹ค. intํ˜• ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ผ๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด..
Java) HashMap์˜ computeIfAbsent์— ๋Œ€ํ•ด(feat. getOrDefault)
ยท
Languages | Frameworks/Java
getOrDefault ์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์•Œ๊ณ  ์žˆ๋Š” map์˜ ๋ฉ”์„œ๋“œ์ค‘ getOrDefault ๋ฉ”์„œ๋“œ๋Š” ํ‚ค๊ฐ’์ด ์—†์œผ๋ฉด ๋‘๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๊ณ ์žˆ๋‹ค. ํ‰์†Œ์— ์ฝ”๋”ฉ ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ, Map ๊ฐ™์€ map์— key, value๋ฅผ ๋„ฃ์–ด์ค„ ๋•Œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด, key๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ํ•ด๋‹น key์˜ value๋ฅผ ๊ฐ€์ ธ์™€์„œ +ํ•ด์ฃผ๊ณ , key๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด default๊ฐ’์— + ํ•ด์„œ ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค. ์˜ˆ์‹œ map.put("key", map.getOrDefault("key", "default๊ฐ’") + "๋”ํ•ด์ค„ ๊ฐ’"); ํ•˜์ง€๋งŒ value๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ •์ˆ˜ํ˜•์ด ์•„๋‹Œ ๋ฆฌ์ŠคํŠธ์ผ ๋•Œ๋Š” ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ• ๊นŒ? Map strListMap = new HashMap(); // ๊ธฐ๋ณธ๊ฐ’ ๋„ฃ๊ธฐ List list = strListM..