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

๐Ÿ’ป/Algorithm

(6)
ํž™(Heap) ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์œ„ํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒ๊ตฌ์กฐ ์ตœ๋Œ€๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์„ ์‰ฝ๊ฒŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ ์ตœ๋Œ€ํž™๊ณผ ์ตœ์†Œํž™
์†Œ์ˆ˜_์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ์†Œ์ˆ˜๋“ค์„ ๋Œ€๋Ÿ‰์œผ๋กœ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ• for(int i = 2; i
์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜_์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ• : 2๊ฐœ์˜ ์ž์—ฐ์ˆ˜ ๋˜๋Š” ์ •์‹์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•˜๋‚˜์ด๋‹ค. ํ˜ธ์ œ๋ฒ•์ด๋ž€ ๋ง์€ ๋‘ ์ˆ˜๊ฐ€ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด์„œ ๊ฒฐ๊ตญ ์›ํ•˜๋Š” ์ˆ˜๋ฅผ ์–ป๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 2๊ฐœ์˜ ์ž์—ฐ์ˆ˜ a, b์— ๋Œ€ํ•ด์„œ a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ ํ•˜๋ฉด(๋‹จ, a>b), a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค. ์ด ์„ฑ์งˆ์— ๋”ฐ๋ผ, b๋ฅผ r๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ r’๋ฅผ ๊ตฌํ•˜๊ณ , ๋‹ค์‹œ r์„ r’๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ ๋‚˜๋ˆ„๋Š” ์ˆ˜๊ฐ€ a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ด๋‹ค. private static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); }
char to int / ASCII CODE Char > int char - '0'; ASCII CODE (int)char
์™„์ „ ํƒ์ƒ‰/DFS/BFS ์™„์ „ ํƒ์ƒ‰ (๋ธŒ๋ฃจํŠธ ํฌ์Šค) ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ค ์‹œ๋„ํ•ด ๋‹ต์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ• ์ •ํ™•ํ•˜๊ณ  ํ™•์‹คํ•˜๊ฒŒ ๋‹ต์„ ์ฐพ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ ๊ฐ™์€ ๋ถ€๋ถ„์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์™„์ „ ํƒ์ƒ‰ ๊ธฐ๋ฒ• ์ข…๋ฅ˜ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰) : ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ๋‹ค์Œ ๋ถ„๊ธฐ(branch)๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— ํ•ด๋‹น ๋ถ„๊ธฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ• ์–ด๋–ค ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ–ˆ์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ฒ€์‚ฌ 1. ์ˆœํ™˜ ํ˜ธ์ถœ ์ด์šฉ(์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š”์ˆœํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜•ํƒœ) 2. ๋ช…์‹œ์ ์ธ ์Šคํƒ ์‚ฌ์šฉ ๋ช…์‹œ์ ์ธ ์Šคํƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฉ๋ฌธํ•œ ์ •์ ๋“ค์„ ์Šคํƒ์— ์ €์žฅํ•˜์˜€๋‹ค๊ฐ€ ๋‹ค์‹œ ๊บผ๋‚ด์–ด ์ž‘์—…ํ•œ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ: ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ์— ์ด ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•œ๋‹ค. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์ด ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)๋ณด๋‹ค..
Stack/Queue/Deque/PriorityQueue Stack Last-In, First-Out -> LIFO ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ push: ๋ฐ์ดํ„ฐ ์‚ฝ์ž… pop: ๋ฐ์ดํ„ฐ ์กฐํšŒ + ์‚ญ์ œ peek: ๋ฐ์ดํ„ฐ ์กฐํšŒ clear: ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ size: stack ์‚ฌ์ด์ฆˆ empty: stack ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€ contains: ํŠน์ • ๋ฐ์ดํ„ฐ ํฌํ•จ ์—ฌ๋ถ€ search: ํŠน์ • ๋ฐ์ดํ„ฐ ์œ„์น˜ ๋ฐ˜ํ™˜ Queue First-In, First-Out -> FIFO ๋จผ์ € ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด ๋จผ์ € ๋‚˜์˜ค๋Š” ๊ตฌ์กฐ LinkedList๋กœ ์ƒ์„ฑ ex) Queue queue = new LinkedList(); add / offer: ๋ฐ์ดํ„ฐ ์‚ฝ์ž… remove / poll: ๋ฐ์ดํ„ฐ ์‚ญ์ œ peek: ๋ฐ์ดํ„ฐ ์กฐํšŒ clear: ๋ฐ์ดํ„ฐ ์ „์ฒด ์‚ญ์ œ Deque queue์˜ ์–‘์ชฝ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…..