Banner

My Tech Blog (Algorithm/์•Œ๊ณ ๋ฆฌ์ฆ˜)

์˜ค๋Š˜์˜ ๋ช…์–ธ
" ์‹คํŒจ๋Š” ๋‹จ์ง€ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋‹ค. ์ด๋ฒˆ์—๋Š” ๋” ํ˜„๋ช…ํ•˜๊ฒŒ. "
- ํ—จ๋ฆฌ ํฌ๋“œ (๋ฏธ๊ตญ ์ž๋™์ฐจ ์‚ฐ์—…์˜ ๊ฐœ์ฒ™์ž, ํฌ๋“œ ์ž๋™์ฐจ ์ฐฝ๋ฆฝ์ž)
์Šคํƒ(Stack)๊ฐœ์š”"์Šคํƒ"์€ ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, "ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out)" ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค. ์ฆ‰, ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์Šคํƒ์€ ์ฃผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ, ๊ณ„์‚ฐ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆ˜์‹ ๊ณ„์‚ฐ, ๋˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.* ์ด์™€ ๋ฐ˜๋Œ€์˜ "์„ ์ž…์„ ์ถœ(FIFO, First In First Out)" ๊ตฌ์กฐ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ 'ํ'๋ผ๊ณ  ํ•œ๋‹ค.   ์Šคํƒ์„ ํ™œ์šฉํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋Š” ์œ ํ˜•์ด ์ •ํ•ด์ ธ ์žˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ž˜ ์ฝ์–ด๋ณด๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„ ์˜ฌ๋ฆฐ๋‹ค๋“ ์ง€, ๋‚˜์ค‘์— ์Œ“์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉด ์Šคํƒ์„ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.  ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ์ œ ์œ ํ˜• โœ… ๊ด„ํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์—์„œ ๊ด„ํ˜ธ์˜ ์ง์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ์Šคํƒ์„ ์‚ฌ์šฉํ•ด ์—ฌ๋Š” ๊ด„ํ˜ธ๋Š” ์Šค..
์ฝ”ํ…Œ ๋ฌธ์ œ ํ’€ ๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ๋„ ๊ณต๋ถ€ํ•ด์•ผ ํ•˜์ง€๋งŒ, ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์ค‘์š”ํ•˜๋‹ค.ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜ ์„ธ ๊ฐ€์ง€ ์Šต๊ด€์„ ๋“ค์—ฌ์•ผ ํ•œ๋‹ค.ํ•˜๋ฃจ ์•„์นจ์— ์ฝ”๋“œ ์“ฐ๋Š” ์Šต๊ด€์ด ๋ฐ”๋€Œ์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ๋งค๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ด๋Ÿฌํ•œ ์Šต๊ด€์„ ์—ผ๋‘์— ๋‘๊ณ  ์ž‘์„ฑํ•˜๋‹ค ๋ณด๋ฉด ์ ์ฐจ ํด๋ฆฐ ์ฝ”๋“œ ์ž‘์„ฑ ๋Šฅ๋ ฅ์ด ํ–ฅ์ƒ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•œ๋‹ค.  1. ์กฐ๊ธฐ๋ฐ˜ํ™˜ (early return)์กฐ๊ธฐ ๋ฆฌํ„ด(early return)์€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด ํ•จ์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ์—์„œ ๋ฐ”๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ํ”ผํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.์˜ˆ๋ฅผ ๋“ค์–ด, totalPrice ํ•จ์ˆ˜์—์„œ ๊ฐ€๊ฒฉ์ด 100์„ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ”๋กœ ํ• ์ธ์„ ์ ์šฉํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ, ์กฐ๊ธฐ ๋ฆฌํ„ด์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ• ์ธ ๋กœ์ง์„ ..
์ •๋ ฌ(Sort)๊ฐœ์š”๋ฐ์ดํ„ฐ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ๋˜๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์—ดํ•˜๊ฑฐ๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.  ์ •๋ ฌ์„ ํ™œ์šฉํ•œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋ฌธ์ œ๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•˜๋‹ค. ์ •๋ ฌ ๋ฌธ์ œ๋Š” ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ๋Š” ์ •๋ ฌ ๊ธฐ์ค€์„ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•˜๊ณ , ๊ทธ์— ๋งž๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ด์ง„ ํƒ์ƒ‰, ํˆฌ ํฌ์ธํ„ฐ, ๋นˆ๋„์ˆ˜ ๊ณ„์‚ฐ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์„ ์กฐํ•ฉํ•ด ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋“ค์ด ๋งŽ๋‹ค.  ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ Arrays.sort() ๋ฅผ ์ด์šฉํ•ด์„œ ์ •๋ ฌํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๋„ ์žˆ๊ณ , ์ •๋ ฌ ๊ธฐ์ค€์„ ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ์ฒด์— ๋งž๊ฒŒ ์ง€์ •ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋ฅผ Collections.sort() ๋˜๋Š” Arrays.sort()์— ์ „๋‹ฌํ•˜์—ฌ ์ •๋ ฌํ•˜๋ฉด ๋˜๊ณ , ์ด ๋•Œ Java 8 ์ด์ƒ์—์„œ๋Š” Comparator๋ฅผ ๋žŒ๋‹ค ํ‘œํ˜„์‹์œผ๋กœ ..
๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Greedy Algorithm)๊ฐœ์š”greedyํ˜•์šฉ์‚ฌ - 1. ํƒ์š•์Šค๋Ÿฌ์šด 2.์š•์‹ฌ ๋งŽ์€  ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜(Greedy Algorithm)์€ ๋งค ์ˆœ๊ฐ„ ๊ฐ€์žฅ ์ตœ์ ์ด๋ผ๊ณ  ํŒ๋‹จ๋˜๋Š” ์„ ํƒ์„ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ์ข… ํ•ด๋‹ต์„ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ฆ‰, ํ˜„์žฌ ๋‹จ๊ณ„์—์„œ์˜ ์ตœ์„ ์˜ ์„ ํƒ์ด ์ตœ์ข…์ ์œผ๋กœ๋„ ์ตœ์ ํ•ด(Optimal Solution)๊ฐ€ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค. ์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ๋งŒ๋‚  ๊ฒฝ์šฐ ์‚ฌ์ „์— ์™ธ์šฐ๊ณ  ์žˆ์ง€ ์•Š์•„๋„ ํ’€ ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์€ ๋ฌธ์ œ ์œ ํ˜•์ง€์—ญ ์ตœ์ ํ•ด(Local Optimum) โ†’ ์ „์—ญ ์ตœ์ ํ•ด(Global Optimum) ๋ณด์žฅ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จํƒ์š•์  ์„ ํƒ(Greedy Choice)๊ณผ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure) ๋งŒ์กฑโœ… ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programming)๊ณผ ์ฐจ์ด..
์ƒ๋‹จ์œผ๋กœ