1. ๋ฌธ์ ์ค๋ช ๐
2. ๊ตฌํ ๋ฐฉ๋ฒ ๐๏ธ
KEY WORD
: ์ฌ๊ท
, DFS
ํด๋น ๋ฌธ์ ์์ ์คํํด์ผ ํ๋ ์์
์๋ 3๊ฐ์ง๋ก ์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ
, ํ ๋
ธ๋์ ๋ํ ์ฒ๋ฆฌ
, ์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ
๊ฐ ์๋ค. ํด๋น ๋ฌธ์ ๋ '์ด ์์๋ฅผ ์ด๋ป๊ฒ ํ ๊ฒ์ธ๊ฐ?'์ ๋ํ ๊ธฐ์ค์ ์ธ์ฐ๋ฉด ์ฝ๊ฒ ํ๋ฆฐ๋ค. ์๋ํ๋ฉด, ์ ์, ์ค์, ํ์ ์ํ๋ ๋ฏธ๋ฆฌ ์ ํด์ง ์์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณตํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ ์ํ ๋ณ 3๊ฐ์ง ์์
์ ๋ํ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- 1๏ธโฃ
์ ์ ์ํ
:ํ ๋ ธ๋์ ๋ํ ์ฒ๋ฆฌ
โ์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ
โ์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ
- 2๏ธโฃ
์ค์ ์ํ
:์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ
โํ ๋ ธ๋์ ๋ํ ์ฒ๋ฆฌ
โ์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ
- 3๏ธโฃ
ํ์ ์ํ
:์ผ์ชฝ ์์ ๋ฐฉ๋ฌธ
โ์ค๋ฅธ์ชฝ ์์ ๋ฐฉ๋ฌธ
โํ ๋ ธ๋์ ๋ํ ์ฒ๋ฆฌ
์๋ฅผ ๋ค์ด ๋ณด๋ฉด, ํ์ ์ํ๋ฅผ ์งํํ๋ค๊ณ ํด๋ณด์. ๋จผ์ A
๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒ์ด๊ณ ,
ํ์ฌ ๋ ธ๋์ ๋ํ ์ฒ๋ฆฌ๋ ํ์ง ์๊ณ ๋ฐ๋ก B๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒ์ด๋ค.
B๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ์์ ์ ๋ํ ์ฒ๋ฆฌ๋ ํ์ง ์๊ณ D๋ฅผ ๋ฐฉ๋ฌธํ๋ค.
D๋ ์์์ด ์์ผ๋ฏ๋ก, ์์ ๋ ๊ณผ์ ์ ์๋ตํ๊ณ , ๋ฐ๋ก ์์ (ํ ๋
ธ๋)์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ๋ค. ํด๋น ๋ฌธ์ ์์๋ ์ถ๋ ฅ์ด ๋ฐ๋ก ํ ๋
ธ๋์ ๋ํ ์ฒ๋ฆฌ
๊ฐ ๋ ๊ฒ์ด๋ค.
ํ์ฌ D
๋ค์ ๋ค์ B๋ก ๋์๊ฐ๋ณด์. B ๋ํ ์ค๋ฅธ์ชฝ ์์์ด ์๊ธฐ์ ์์ ์ ๋ํ ์ฒ๋ฆฌ๋ก ์ด์ด์ง๋ค.
ํ์ฌ DB
A๋ก ๋์์์ผ๋, A๋ ์ค๋ฅธ์ชฝ ์์์ด ์๋ค. ๋ฐ๋ผ์ C๋ก ๊ฐ๋ค.
C๋ ์ผ์ชฝ ์์์ด ์๋ค. ๋ฐ๋ผ์ E๋ก ๊ฐ๋ค. ๊ทผ๋ฐ, E๋ ์์์ด ์์ผ๋, ๋ฐ๋ก ์์ ์ ๋ํ ์ฒ๋ฆฌ๋ก ์ด์ด์ง๋ค.
ํ์ฌ DBE
์ง๊ธ๊น์ง ์ถ๋ ฅ๋ ๋ฌธ์๋ DBE
์ด๋ค. C๋ ์ค๋ฅธ์ชฝ ์์์ด ์๊ธฐ์ F๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒ์ด๊ณ , F๋ ์ผ์ชฝ ์์ ์์ด ์ค๋ฅธ์ชฝ ์์๋ง ์๊ธฐ์ G๋ฅผ ๋ฐฉ๋ฌธํ ๊ฒ์ด๋ค.
G๋ ์์์ด ์๊ธฐ์ ์์ ์ ๋ํ ์ถ๋ ฅ์ผ๋ก ์ด์ด์ง๋ค.
ํ์ฌ DBEG
์ด์ ์ถ๋ ฅ๋์ง ์๊ณ , ๋จ์ F
,C
,A
๋ฅผ ๋ณด๋ฉด, ์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ๋ง์ณค์์ผ๋ก, ์์ ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํํ ์ฐจ๋ก๋ค. ๋ฐ๋ผ์ ์ฌ๊ท๋ฅผ ๋ง์น๊ณ ๋์์ค๋ F
โ C
โ A
์์ผ๋ก ์ถ๋ ฅ๋๋ค.
์ต์ข
DBEGFCA
(1) ์๊ฐ๋ณต์ก๋ ๋ถ์ ๐
๋
ธ๋์ ๊ฐ์ N
์ด ๋ง์์ผ 26๊ฐ์ด๋ค. ์ด์ง ํธ๋ฆฌ์์ผ๋ก, ๊ฐ์ ์ ๊ฐ์๋ ๋ง์์ผ 25๊ฐ์ด๋ค. ๋ฐ๋ก ์๊ฐ๋ณต์ก๋๋ฅผ ์ ๊ฒฝ์จ์ผ ํ๋ ๋ฌธ์ ๋ ์๋๋ค.
3. ์ฝ๋ ์๊ฐ ๐
(1) SUDO CODE
- 0๏ธโฃ ์์ ์ ์์ ๋ฒํธ๋ฅผ ๋ฉค๋ฒ ๋ณ์๋ก ๊ฐ์ง๋
Node
ํด๋์ค ๋ง๋ค๊ธฐ, ํด๋น ํด๋์ค๋ฅผ 26๊ฐ์ง๋ฆฌ ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ - 1๏ธโฃ ์ ๋ ฅ์ intํ์ผ๋ก ๋ณํํด์ ๋ฐ๊ณ ํธ๋ฆฌ ์์ฑ ์ํค๊ธฐ
- 2๏ธโฃ ์์ ์ค๋ช ํ ์์๋๋ก ์ฌ๊ทํ๋ ์ ์, ์ค์, ํ์ ํจ์ ๋ง๋ค๊ธฐ
- 3๏ธโฃ ๊ฐ ์ํ์ ๊ฐ ๋ชจ์ ์ถ๋ ฅํ๊ธฐ ์ํด StringBuilder๋ฅผ 3๊ฐ ๋ง๋ค๊ณ , ๊ฐ๊ฐ์ ๊ฐ์ ์ ์ฅ
- 4๏ธโฃ ํ ๋ฒ์ 3๊ฐ์ง ์ฐจ๋ก๋๋ก ์ถ๋ ฅ
(2) JAVA CODE
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
private static class Node {
int left;
int right;
public Node () {
}
}
// 'A' = 65, '.' = 46
static int N;
static StringBuilder[] ans = new StringBuilder[3];
static Node [] nodes = new Node[26];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int start = st.nextToken().charAt(0) - 65;
int left = st.nextToken().charAt(0) - 65;
int right = st.nextToken().charAt(0) - 65;
if(nodes[start] == null) nodes[start] = new Node();
nodes[start].left = left;
nodes[start].right = right;
}
ans[0] = new StringBuilder();
ans[1] = new StringBuilder();
ans[2] = new StringBuilder();
preorder(0); inorder(0); postorder(0);
System.out.println(ans[0]);
System.out.println(ans[1]);
System.out.println(ans[2]);
}
public static void preorder(int now) {
if(now < 0) return;
ans[0].append((char)(now + 65));
preorder(nodes[now].left);
preorder(nodes[now].right);
}
public static void inorder(int now) {
if(now < 0) return;
inorder(nodes[now].left);
ans[1].append((char)(now + 65));
inorder(nodes[now].right);
}
public static void postorder(int now) {
if(now < 0) return;
postorder(nodes[now].left);
postorder(nodes[now].right);
ans[2].append((char)(now + 65));
}
}
4. ๋ฐฐ์ด ๊ฒ๋ค ๐ฏ
ํธ๋ฆฌ๋ฅผ ์ค๋๋ง์? ๋ง๋ค์ด ๋ณธ ๊ฑฐ ๊ฐ์. ํธ๋ฆฌ ๋ง๋๋ ๋ฒ์ ์ต์ํด์ก๋ค.