티스토리 뷰
출저 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV140YnqAIECFAYD
"Complete Binary Tree를 배열로 구현하고 탐색"
이 문제는 Complete Binary (완전 이진트리라고함.. full , complete, perfect 등에 번역이 헷갈려 영어로 기억함.) 의 중위 순회를 구현하는 문제이다.
Complete binary tree 는 배열로 구현가능하며, 배열 안에서 인덱스로 특정 노드의 부모, 자식 위치를 구할 수 있다.
아래와 같다.
노드 i의 부모 : (i-1) /2
노드 i의 왼쪽 자식 : (2*i) +1
노드 i의 오른쪽 자식 : (2*i) +2
참 쉽쥬?
그리고 중위 순회 (in-order) 의 경우 LDR 의 순서로 탐색한다, (왼쪽- 현재노드 - 오른쪽)
따라서 구현도 쉽다. 현재 노드의 왼쪽 부터 쭉 타고 들어가고, 왼쪽이 없으면 현재 node를 출력하고, 다시 오른쪽으로 쭉~~~ 타고 들어간다.
1 2 3 4 5 | static void inOrder(int node) { if((2*node) + 1 < n) inOrder((2*node) + 1); sb.append(map[node]); if((2*node) + 2 < n) inOrder((2*node) + 2); } | cs |
그리고, Java 에서 다수의 문자를 출력할 때, StringBuilder 혹은 SgringBuffer 를 쓰는게 좋다.(PS의 경우 builder를 쓰는게 더 좋음, buffer는 동기화 처리가 되어 있어서 좀 느리다고함.) I/O 는 적게 일어나면 일어날수록 좋으므로....
System class의 함수들을 계속 호출하지말자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; class Solution { static int T = 10; static int n; static char[] map; static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int t =1; while(T-- > 0) { n = Integer.parseInt(br.readLine()); map = new char[n]; for (int i = 0; i < n; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); st.nextToken(); map[i] = st.nextToken().charAt(0); while(st.hasMoreTokens()) st.nextToken(); } sb.append("#"+(t++)+" "); inOrder(0); System.out.println(sb.toString()); sb.setLength(0); } } static void inOrder(int node) { if((2*node) + 1 < n) inOrder((2*node) + 1); sb.append(map[node]); if((2*node) + 2 < n) inOrder((2*node) + 2); } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
SWEA 1248. 공통조상 :: 돼지개발자 (0) | 2019.02.14 |
---|---|
SWEA 2112. 보호 필름 :: 돼지개발자 (0) | 2019.02.14 |
SWEA 1808. 지희의 고장난 계산기 :: 돼지개발자 (1) | 2019.02.12 |
SWEA 4050. 재관이의 대량 할인 :: 돼지개발자 (0) | 2019.02.10 |
백준 2026. 소풍 :: 돼지개발자 (0) | 2019.02.08 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday