2 ๋ถ„ ์†Œ์š”

๐Ÿ“ [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์ด ์•„๋‹ˆ๋ฉด ๊ณ„์† ์žฌ๊ท€๋กœ ๊ฐ’ ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: