๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์ž๋ฃŒ๊ตฌ์กฐ - ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ (Binary-Search-Tree)

์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ ๊ตฌ์กฐ ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด (์ด์ง„ ํŠธ๋ฆฌ์™€ ๋‹ค๋ฅด๋‹ค) ๋ชจ๋“  ์›์†Œ๋Š” ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์ง€๋ฉด ์•ˆ๋œ๋‹ค. ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์€ ๋ฃจํŠธ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์•„์•ผ ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ์— ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋“ค์˜ ๊ฐ’์€ ๋ฃจํŠธ์˜ ๊ฐ’๋ณด๋‹ค ์ปค์•ผ ํ•œ๋‹ค. ์ด์ง„ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์‚ฝ์ž… ์œ„์— ์ด์ง„ํŠธ๋ฆฌ์˜ ์กฐ๊ฑด์„ ์ด์šฉํ•ด์„œ ์‚ฝ์ž…์„ ์œ„ ๊ทธ๋ฆผ ์ฒ˜๋Ÿผ ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์‚ฝ์ž… ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋ฉด, public class BinaryTree { Node root; public void insertNode(int value) { /* root๊ฐ€ ๋น„์—ˆ์„ ๊ฒฝ์šฐ */ if(root == null){ root = new Node(value); }else { Node temp = this.root; while(true) { /* ์™ผ์ชฝ์œผ๋กœ ๊ฐ€์•ผ ํ•˜..

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰), DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) BFS์˜ ์žฅ์  ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ์ ๊ณ  ๊นŠ์ด๊ฐ€ ์–•์€ ๊ฒฝ์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹จ์ˆœ ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)๋ณด๋‹ค ๋น ๋ฆ„ ๋„ˆ๋น„๋ฅผ ์šฐ์„  ํƒ์ƒ‰ํ•˜๊ธฐ์— ๋‹ต์ด ๋˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋„ ์ตœ๋‹จ๊ฒฝ๋กœ์ž„์„ ๋ณด์žฅํ•œ๋‹ค. ์ตœ๋‹จ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด ์–ด๋Š ํ•œ ๊ฒฝ๋กœ๊ฐ€ ๋ฌดํ•œํžˆ ๊นŠ์–ด์ง„๋‹คํ•ด๋„ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. BFS์˜ ๋‹จ์  ์žฌ๊ท€ํ˜ธ์ถœ์˜ DFS์™€๋Š” ๋‹ฌ๋ฆฌ ํ์— ๋‹ค์Œ์— ํƒ์ƒ‰ํ•  ์ •์ ๋“ค์„ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค. ๋…ธ๋“œ์˜ ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ํƒ์ƒ‰ํ•ด์•ผํ•˜๋Š” ๋…ธ๋“œ ๋˜ํ•œ ๋งŽ์•„์ง€๊ธฐ์— ๋น„ํ˜„์‹ค์ ์ด๋‹ค. BFS ๊ตฌํ˜„ Queue์— ๋ฃจํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ , ์•„๋ž˜์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค. Queue์—์„œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๊บผ๋ƒ…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋…ธ๋“œ์˜ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์ฐจ๋ก€๋Œ€๋กœ ํ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. /..

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๋ฐฑํŠธ๋ž˜ํ‚น(Back-Tracking)

๋ฐฑํŠธ๋ž˜ํ‚น ์ด๋ž€? ๋ฐฑํŠธ๋ž˜ํ‚น์€ ๋ชจ๋“  ์กฐํ•ฉ์˜ ์ˆ˜๋ฅผ ์‚ดํŽด๋ณด์ง€๋งŒ, ์กฐ๊ฑด์ด ๋งŒ์กฑํ•  ๋•Œ๋งŒ ์‚ดํŽด๋ณด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํ›จ์”ฌ ๋น ๋ฅผ์ˆ˜๋„ ์žˆ๋‹ค. ๋ฐฑํŠธ๋ž˜ํ‚น ์‹คํ–‰ ์ˆœ์„œ ๋ฐฑํŠธ๋ž˜ํ‚น์€ DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)์„ ๋จผ์ € ์‹คํ–‰ํ•˜๋ฉด์„œ ๋” ์ด์ƒ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ฉด ๋‹ค์‹œ ๋˜๋Œ์•„ ๊ฐ€์„œ(๋ฐฑํŠธ๋ž˜ํ‚น) ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉด ์ดํ•ด๊ฐ€ ์ž˜ ๋  ๊ฒƒ์ด๋‹ค. www.acmicpc.net/step/34 ๋ฐฑํŠธ๋ž˜ํ‚น ๋‹จ๊ณ„ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ๋ฐฑํŠธ๋ž˜ํ‚น ๋ฌธ์ œ 1 www.acmicpc.net N๊ณผ M (1) ํ’€์–ด๋ณด๊ธฐ ์ž์—ฐ์ˆ˜ N์ด ์ฃผ์–ด์ง€๋ฉด 1๋ถ€ํ„ฐ N๊นŒ์ง€ ์ž์—ฐ์ˆ˜ ์ค‘์—์„œ ์ค‘๋ณต ์—†์ด M๊ฐœ๋ฅผ ๊ณ ๋ฅธ ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, N : 3 , M : 3 ์ผ๋•Œ, ์ค‘๋ณต ์—†์ด ์•„๋ž˜ ์ฒ˜๋Ÿผ ์ถœ๋ ฅ์‹œํ‚ค๋ฉด ๋œ๋‹ค. ---------------------------..

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (feat. Factorial, Fibonacci)

์žฌ๊ท€(Recursion) ์ด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์–ด๋Š ํ•œ ์ปดํ“จํ„ฐ๊ณตํ•™๊ณผ ํ•™์ƒ์ด ์œ ๋ช…ํ•œ ๊ต์ˆ˜๋‹˜์„ ์ฐพ์•„๊ฐ€ ๋ฌผ์—ˆ๋‹ค. "์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋ญ”๊ฐ€์š”?" "์ž˜ ๋“ค์–ด๋ณด๊ฒŒ. ์˜›๋‚ ์˜›๋‚  ํ•œ ์‚ฐ ๊ผญ๋Œ€๊ธฐ์— ์ด์„ธ์ƒ ๋ชจ๋“  ์ง€์‹์„ ํ†ต๋‹ฌํ•œ ์„ ์ธ์ด ์žˆ์—ˆ์–ด. ๋งˆ์„ ์‚ฌ๋žŒ๋“ค์€ ๋ชจ๋‘ ๊ทธ ์„ ์ธ์—๊ฒŒ ์ˆ˜๋งŽ์€ ์งˆ๋ฌธ์„ ํ–ˆ๊ณ , ๋ชจ๋‘ ์ง€ํ˜œ๋กญ๊ฒŒ ๋Œ€๋‹ตํ•ด ์ฃผ์—ˆ์ง€. ๊ทธ์˜ ๋‹ต์€ ๋Œ€๋ถ€๋ถ„ ์˜ณ์•˜๋‹ค๊ณ  ํ•˜๋„ค. ๊ทธ๋Ÿฐ๋ฐ ์–ด๋Š ๋‚ , ๊ทธ ์„ ์ธ์—๊ฒŒ ํ•œ ์„ ๋น„๊ฐ€ ์ฐพ์•„์™€์„œ ๋ฌผ์—ˆ์–ด. "์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋ญ”๊ฐ€์š”?" "์ž˜ ๋“ค์–ด๋ณด๊ฒŒ. ์˜›๋‚ ์˜›๋‚  ํ•œ ์‚ฐ ๊ผญ๋Œ€๊ธฐ์— ์ด์„ธ์ƒ ๋ชจ๋“  ์ง€์‹์„... ์ถœ์ฒ˜ : namu.wiki/w/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98 ํŒฉํ† ๋ฆฌ์–ผ๋กœ ์•Œ์•„๋ณด๋Š” ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋จผ์ € ํŒฉํ† ๋ฆฌ์–ผ ์ด๋ž€? ์ˆซ์ž n์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, n ๋ถ€ํ„ฐ 1๊นŒ์ง€์˜ ๊ณฑ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋œปํ•œ๋‹ค. 0! = 1 1! =..

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - Merge Sort (๋ถ„ํ•  ์ •๋ณต, ๋ณ‘ํ•ฉ ์ •๋ ฌ)

์•ˆ๋…•ํ•˜์„ธ์š”, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š '๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. iseunghan.tistory.com ๋ถ„ํ•  ์ •๋ณต (Merge Sort) Merge Sort, ๋ถ„ํ•  ์ •๋ณต, ๋ณ‘ํ•ฉ ์ •๋ ฌ, ํ•ฉ๋ณ‘ ์ •๋ ฌ ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ์ตœ์•…์˜ ์ƒํ™ฉ๊นŒ์ง€๋„ O(n log n)์„ ๋ณด์žฅํ•œ๋‹ค. ๋‚˜๋Š” ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ• ๋•Œ, ๋ถ„ํ•  ์ •๋ณต์ด๋ผ๊ณ  ๋ฐฐ์›Œ์„œ ๋ถ„ํ•  ์ •๋ณต์ด๋ผ๊ณ  ์นญํ•˜๊ฒ ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๋ถ„ํ•  ์ •๋ณต์ผ๊นŒ? Merge Sort๊ฐ€ O(n logn)์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ๋Š” ์ •๋ ฌ ํ•  ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋ถ„ํ•  ํ•œ๋’ค ๊ฐ๊ฐ ์ •๋ ฌ ์‹œํ‚ค๊ณ  ํ•ฉ์น˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. (์•„๋ž˜์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์ž) ..

๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ - Counting Sort (์นด์šดํŒ… ์ •๋ ฌ / ๊ณ„์ˆ˜ ์ •๋ ฌ) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์•ˆ๋…•ํ•˜์„ธ์š”, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ •๋ฆฌํ•˜๋Š” ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฐธ๊ณ ํ•˜์‹œ๋ ค๋ฉด ํ•ด๋‹น ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š '๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก ๊ณต๋ถ€ํ•œ ๊ฒƒ๋“ค ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค. iseunghan.tistory.com ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort) ์นด์šดํŒ… ์ •๋ ฌ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๐šถ(๐‘›) ์œผ๋กœ ์†๋„๊ฐ€ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ํ€ต ์ •๋ ฌ(Quick Sort), ํ•ฉ๋ณ‘ ์ •๋ ฌ(Merge Sort) ์˜ ํ‰๊ท  ์‹œ๊ฐ„๋ณต์žก๋„๋Š” ๐šถ(nlogn) ์ธ๋ฐ ์นด์šดํŒ… ์ •๋ ฌ์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๐šถ(๐‘›) ์œผ๋กœ ์†๋„๊ฐ€ ์•„์ฃผ ์šฐ์ˆ˜ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์นด์šดํŒ… ์ •๋ ฌ์„ ์ฝ”๋“œ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋œฏ์–ด์„œ ๋ณด์ž. ๋จผ์ €, ๋ฐฐ์—ด์€ ์„ธ๊ฐ€์ง€๋ฅผ ์„ ์–ธ ํ•ด์ค€๋‹ค. int[] array = new int[100]; //์ˆ˜์—ด์˜ ์›์†Œ : 100๊ฐœ int[] cou..

iseunghan
'๐ŸŒป JAVA/์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)