BOJ_S1_1991
๐ [S1_1991] ํธ๋ฆฌ ์ํ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
// ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์ ์ฅ ๋
ธ๋
static class Node{
int left;
int right;
public Node(int left, int right) {
super();
this.left = left;
this.right = right;
}
}
static int N;
static List<Node>[] list;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// **** input start ****
N = Integer.parseInt(br.readLine());
// ArrayList๋ฅผ ํ๊ณ ์๋ list ์์ฑ
list = new ArrayList[N];
for(int i=0; i<N; i++) {
list[i] = new ArrayList<>();
}
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine(), " ");
// 0 -> 'A', 1 -> 'B', 2 -> 'C',
int top = st.nextToken().charAt(0) - 65;
int left = st.nextToken().charAt(0) - 65;
int right = st.nextToken().charAt(0) - 65;
// ๋ฆฌ์คํธ์ ๋
ธ๋ ์
๋ ฅ
list[top].add(new Node(left, right));
}
// **** input end ****
// ์ ์
preorder(0);
sb.append("\n");
// ์ค์
inorder(0);
sb.append("\n");
// ํ์
postorder(0);
System.out.println(sb);
}
// ์ ์ : ๋ฃจํธ -> ์ผ -> ์ค
static void preorder(int start) {
for(Node node : list[start]) {
int left = node.left;
int right = node.right;
// ์ถ๋ ฅ
sb.append((char)(start+'A'));
// ์ผ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(left != -19) preorder(left);
// ์ค๋ฅธ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(right != -19) preorder(right);
}
}
// ์ค์ : ์ผ -> ๋ฃจํธ -> ์ค
static void inorder(int start) {
for(Node node : list[start]) {
int left = node.left;
int right = node.right;
// ์ผ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(left != -19) inorder(left);
// ์ถ๋ ฅ
sb.append((char)(start+'A'));
// ์ค๋ฅธ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(right != -19) inorder(right);
}
}
// ํ์ : ์ผ -> ์ค๋ฅธ -> ๋ฃจํธ
static void postorder(int start) {
for(Node node : list[start]) {
int left = node.left;
int right = node.right;
// ์ผ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(left != -19) postorder(left);
// ์ค๋ฅธ์ชฝ ๊ฒ์ด '.' ์ด ์๋ ๊ฒฝ์ฐ
if(right != -19) postorder(right);
// ์ถ๋ ฅ
sb.append((char)(start+'A'));
}
}
}
๐ค ๋์ ์๊ฐ
์ด ๋ฌธ์ ๋ฅผ ํ์ผ๋ก์จ ํธ๋ฆฌ ๋ฌธ์ ์ ๊ทผ์ ๋ํด ํ์คํ ๊นจ๋ฌ์๋ค ํคํคํค
ํธ๋ฆฌ ๋ฌธ์ ์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ํธ๋ฆฌ ์ ๋ณด์ ๋ํ ์ ์ฅ์ด๋ค.
์ ์, ์ค์, ํ์ ๋ ์ฌ๊ท๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ๋๋ค๋ ๊ฒ์ ์ฝ๊ฒ ํ์
ํ ์ ์์์ง๋ง ํธ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ ์ง๋ ๊ณ ๋ฏผ์ด ๋ง์๋ค.
์ ์ ํธ๋ฆฌ ๋ฌธ์ ์ ์ด๋ฒ ํธ๋ฆฌ ๋ฌธ์ ๊ฐ ๋์ผํ๊ฒ List[] ๋ฐฐ์ด ์์ ArrayList๋ฅผ ์์ฑํด ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๊ทธ๋์ ๋ณธ์ธ๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋์ค์ for๋ฌธ์ ํตํด ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
ํ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ ธ๋ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ
- ArrayList๋ฅผ ์ ์ฅํ๋ list ๋ฐฐ์ด ์์ฑ
- ๊ฐ๋ค ์ ๋ ฅ ( ๋ฌธ์๋ฅผ ์ซ์๋ก ์ ์ฅ -> โAโ : 0 , โBโ : 1 โฆ)
- ์ ์, ์ค์, ํ์ ์์ฑ
- โ.โ ์ ์ ๋ ฅ๋ฐ์ ๋ ์ซ์๋ก -19๊ฐ ์ ์ฅ๋จ
- -19์ด ์๋๋ฉด ๊ณ์ ์ฌ๊ท๋ก ๊ฐ ์ถ๋ ฅํด์ฃผ๊ธฐ