๐ป JAVA/์๊ณ ๋ฆฌ์ฆ, ์๋ฃ๊ตฌ์กฐ
์ด์งํ์ ํธ๋ฆฌ ๊ตฌ์กฐ ์ด์งํ์ ํธ๋ฆฌ์ ์กฐ๊ฑด (์ด์ง ํธ๋ฆฌ์ ๋ค๋ฅด๋ค) ๋ชจ๋ ์์๋ ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง๋ฉด ์๋๋ค. ํธ๋ฆฌ์ ๋ฃจํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์กด์ฌํ๋ ๋
ธ๋๋ค์ ๊ฐ์ ๋ฃจํธ์ ๊ฐ๋ณด๋ค ์์์ผ ํ๋ค. ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ์ ์กด์ฌํ๋ ๋
ธ๋๋ค์ ๊ฐ์ ๋ฃจํธ์ ๊ฐ๋ณด๋ค ์ปค์ผ ํ๋ค. ์ด์งํ์ ํธ๋ฆฌ์ ์ฝ์
์์ ์ด์งํธ๋ฆฌ์ ์กฐ๊ฑด์ ์ด์ฉํด์ ์ฝ์
์ ์ ๊ทธ๋ฆผ ์ฒ๋ผ ํด์ฃผ๋ฉด ๋๋ค. ์ฝ์
์ฝ๋๋ฅผ ์์ฑํด ๋ณด๋ฉด, 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 (๋๋น ์ฐ์ ํ์) BFS์ ์ฅ์ ๋
ธ๋์ ์๊ฐ ์ ๊ณ ๊น์ด๊ฐ ์์ ๊ฒฝ์ฐ ๋น ๋ฅด๊ฒ ๋์ํ ์ ์๋ค. ๋จ์ ๊ฒ์ ์๋๊ฐ ๊น์ด ์ฐ์ ํ์(DFS)๋ณด๋ค ๋น ๋ฆ ๋๋น๋ฅผ ์ฐ์ ํ์ํ๊ธฐ์ ๋ต์ด ๋๋ ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ์๋ ์ต๋จ๊ฒฝ๋ก์์ ๋ณด์ฅํ๋ค. ์ต๋จ๊ฒฝ๋ก๊ฐ ์กด์ฌํ๋ค๋ฉด ์ด๋ ํ ๊ฒฝ๋ก๊ฐ ๋ฌดํํ ๊น์ด์ง๋คํด๋ ์ต๋จ๊ฒฝ๋ก๋ฅผ ๋ฐ๋์ ์ฐพ์ ์ ์๋ค. BFS์ ๋จ์ ์ฌ๊ทํธ์ถ์ DFS์๋ ๋ฌ๋ฆฌ ํ์ ๋ค์์ ํ์ํ ์ ์ ๋ค์ ์ ์ฅํด์ผ ํ๋ฏ๋ก ์ ์ฅ๊ณต๊ฐ์ด ๋ง์ด ํ์ํ๋ค. ๋
ธ๋์ ์๊ฐ ๋์ด๋๋ฉด ํ์ํด์ผํ๋ ๋
ธ๋ ๋ํ ๋ง์์ง๊ธฐ์ ๋นํ์ค์ ์ด๋ค. BFS ๊ตฌํ Queue์ ๋ฃจํธ๋ฅผ ๋ฃ์ด์ฃผ๊ณ , ์๋์ ์์๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋๋ค. Queue์์ ํ๋์ ๋
ธ๋๋ฅผ ๊บผ๋
๋๋ค. ํด๋น ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋
ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ , ์ฐจ๋ก๋๋ก ํ์ ์ฝ์
ํฉ๋๋ค. /..
๐ป JAVA/์ ๋ฆฌ์ ๋ฆฌ์ ๋ฆฌ
ํ์ตํ ๊ฒ ํด๋์ค ์ ์ํ๋ ๋ฐฉ๋ฒ ๊ฐ์ฒด ๋ง๋๋ ๋ฐฉ๋ฒ (new ํค์๋ ์ดํดํ๊ธฐ) ๋ฉ์๋ ์ ์ํ๋ ๋ฐฉ๋ฒ ์์ฑ์ ์ ์ํ๋ ๋ฐฉ๋ฒ this ํค์๋ ์ดํดํ๊ธฐ ํด๋์ค์ ๊ฐ๋
๋จผ์ ํด๋์ค์ ๊ฐ๋
์ ๋ํด์ ์ง๊ณ ๋์ด๊ฐ์ผ ํ ๊ฒ ๊ฐ์์, ๊ณต๋ถํด ๋ณด์๋ค. ํด๋์ค๋ ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ํ ๋๋ ์ค๊ณ๋์ ๊ฐ์ ์๋ฏธ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฐ์์๋ ์ด๋ฌํ ์ค๊ณ๋์ธ ํด๋์ค๋ฅผ ๊ฐ์ง๊ณ , ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฉํ๊ฒ ๋ฉ๋๋ค. ํด๋์ค๋ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์ ๊ฐ์ฒด์ ํ๋์ ๋ํ๋ด๋ ๋ฉ์๋๋ก ๊ตฌ์ฑ์ด ๋ฉ๋๋ค. ๊ฐ์ฒด(Object) ์ฌ์ ์ ์๋ฏธ : ๋ฌผ๊ฑด ๋๋ ๋์ ๊ฐ์ฒด์ ์ํ(state)์ ํ๋(behavior)์ ๊ตฌ์ฒดํํ๋ ํํ์ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด์, "๋๋ ๊ณผ์ผ์ฅ์์๊ฒ ๋ ๊ฐ์ ์ฌ๊ณผ๋ฅผ ๊ตฌ๋งคํ๋ค"๋ผ๋ ๋ฌธ์ฅ์..
๐ป JAVA/์๊ณ ๋ฆฌ์ฆ, ์๋ฃ๊ตฌ์กฐ
๋ฐฑํธ๋ํน ์ด๋? ๋ฐฑํธ๋ํน์ ๋ชจ๋ ์กฐํฉ์ ์๋ฅผ ์ดํด๋ณด์ง๋ง, ์กฐ๊ฑด์ด ๋ง์กฑํ ๋๋ง ์ดํด๋ณด๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฒฝ์ฐ์ ๋ฐ๋ผ ํจ์ฌ ๋น ๋ฅผ์๋ ์๋ค. ๋ฐฑํธ๋ํน ์คํ ์์ ๋ฐฑํธ๋ํน์ DFS(๊น์ด ์ฐ์ ํ์)์ ๋จผ์ ์คํํ๋ฉด์ ๋ ์ด์ ํ์์ ์งํํ ์ ์๋ ์ํฉ์ด๋ฉด ๋ค์ ๋๋์ ๊ฐ์(๋ฐฑํธ๋ํน) ํ์์ ์งํํ๋ค. ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด ์ดํด๊ฐ ์ ๋ ๊ฒ์ด๋ค. www.acmicpc.net/step/34 ๋ฐฑํธ๋ํน ๋จ๊ณ ์กฐ๊ธ ๋ ๋ณต์กํ ๋ฐฑํธ๋ํน ๋ฌธ์ 1 www.acmicpc.net N๊ณผ M (1) ํ์ด๋ณด๊ธฐ ์์ฐ์ N์ด ์ฃผ์ด์ง๋ฉด 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด์ ์ถ๋ ฅํ๋ฉด ๋๋ค. ์๋ฅผ ๋ค์ด, N : 3 , M : 3 ์ผ๋, ์ค๋ณต ์์ด ์๋ ์ฒ๋ผ ์ถ๋ ฅ์ํค๋ฉด ๋๋ค. ---------------------------..
๐ป JAVA/์ ๋ฆฌ์ ๋ฆฌ์ ๋ฆฌ
๋งค๋ฒ ๊ฐ์ฒด์ ๋ํด์ ์ดํด๋ฅผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง, ๋ง์ ์ฌ์ฉ์ ํด๋ณด๋ฉด ์ด๊ฒ ์ ์ด๋ ๊ฒ ๊ฐ์ด ์ฐํ์ง? ๋ผ๋ ๊ฒฝํ์ด ๋ง์๋ค.. ๋ค์ ํ๋ฒ ์ ๋๋ก ์ ๋ฆฌํด๋ณด๋๋ก ํ๊ฒ ์ด๋ค.. ๋ด๊ฐ ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ // 1๋ฒ ๊ณผ์ CopyTest c1 = new CopyTest(); People test = new People(10, "a"); c1.man = test; // 2๋ฒ ๊ณผ์ People peo2 = new People(20, "b"); test = peo2; // ์๋๋ผ๋ฉด GC์ ์ํด new People(100,"100")์ด ์ ๋ฆฌ ๋๋๋ฐ, c1.man์ด ์ก๊ณ ์์ด์ ์์ง ๋์์ด ์๋๊ฒ ๋๋ค. // ์ถ๋ ฅ System.out.println(c1.man.age); // 10 (๊ธฐ์กด test์ ์ฃผ์๊ฐ์ ์ฐธ์กฐํ๊ณ ์๋ค.) Sy..
๐ป JAVA/์ ๋ฆฌ์ ๋ฆฌ์ ๋ฆฌ
LinkedList ์ ๊ฐ๋
ArrayList ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ฑฐ๋ ์ถ๊ฐํ๋ฉด ๋ ํฐ ๊ณต๊ฐ์ผ๋ก (๋๋ ๋ ์์ ๊ณต๊ฐ์ผ๋ก) ์ด๋ํด์ผ ํ๋ค. (์๊ฐ์ด ๋ง์ด ์์๋จ) ๋ง์ฝ ํฌ๊ธฐ๊ฐ 5์ธ list์ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ฉด ๊ทธ ๋ค์์ ์๋ ๋ฐ์ดํฐ๋ค์ ํ์นธ ์ฉ ๋ชจ๋ ์ด๋์์ผ์ผ ํ๋ฏ๋ก (๋ง์ฝ ํฌ๊ธฐ๊ฐ 1์ต์ด๋ฉด? ์์ฒญ๋๋ค.) ์ํ๋ ์ธ๋ฑ์ค์ ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. LinkedList ์ฐ๊ฒฐ(link)๋ ๊ตฌ์กฐ์ด๋ค. ArrayList์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ด ๋ฐ์ดํฐ๋ค์ด ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ ธ ์๋ค. ์ฅ์ : ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ ๋, ์ด์ ๊ฐ๊ณผ ์ถ๊ฐ(๋๋ ์ญ์ )ํ ๊ฐ์ next๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ฏ๋ก ํจ์ฌ ๋น ๋ฅด๋ค. ๋จ์ : ์ํ๋ ์ธ๋ฑ์ค์ ์ง์ ์ ๊ทผ์ด ์๋๋ค. ๋
ธ๋์๋ [๋ฐ์ดํฐ + ๋ค์ ๋
ธ๋] ๊ฐ ๋ค์ด..