썸네일 BufferedReader로 입력 받을 때 NPE 방지하기 https://www.acmicpc.net/problem/5639 5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net 최근 이 문제를 풀었고, 코드가 분명 이클립스 IDE에서는 잘 돌아갔는데 제출만 하면 RuntimeError - NullPointerException이 떴다. 죽어라 봐도 모르겠어서 결국 다른 분 블로그의 답을 확인했는데, 다른 부분은 전부 같고 //내 코드 if (temp.equals("") || temp == null) { // temp가 null이거나 빈 문자열인 경우 실행될 코..
썸네일 Tree, BinaryTree 트리 (Tree) Tree 구조는 계층적인 구조를 표현할 수 있는 자료구조이다. Tree 구조는 루트 노드에서 시작하여 여러개의 하위 노드들이 연결된 형태로 구성되며, 각 노드는 각자의 하위 노드들을 가질 수 있다. Java에서는 Tree 구조를 구현하기 위해 다음의 인터페이스와 클래스들을 사용한다. 아래 인터페이스와 클래스들은 중복값을 허용하지 않는다. 사용 인터페이스 java.util.Set Tree 구조를 구현하기 위한 인터페이스로, 이 인터페이스를 implements 하는 클래스들은 모두 Tree 구조를 갖는다. java.util.SortedSet Set 인터페이스를 상속받으며, 정렬된 Tree 구조를 표현하기 위한 인터페이스이다. 사용 클래스 java.util.TreeSet SortedSet 인..
썸네일 PriorityQueue PriorityQueue (우선순위 큐)는 우선순위에 따라 정리되어 있으며, 우선순위가 가장 높은 요소에 먼저 접근할 수 있는 자료구조이다. PriorityQueue 의 구현을 위해서는 Heap 이 사용된다. PriorityQueue는 기본적으로 Min Heap을 사용한다. 가장 높은 우선순위를 갖는 요소는 root 노드에 위치하게 된다. 이에 따른 요소의 추가와 삭제 과정은 다음과 같다. 추가 과정 새로운 요소를 Heap의 마지막 노드에 위치시킨다. 부모노드와 비교하며 적절한 위치에 배치한다. 삭제 과정 우선순위가 제일 높은 요소를 뽑는다. (root 노드) 이후 Heap의 마지막 노드를 root 노드의 위치로 이동시킨다. 자식노드와 비교하며 적절한 위치에 배치한다. PriorityQueue 클래스 메..
썸네일 == 와 .equals() 차이 [백준 1991] 트리순회 [백준 1991] 트리순회 https://www.acmicpc.net/problem/1991 1991번: 트리 순회 첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 eggmomo.tistory.com 저번에 풀었던 [백준 1991] 트리순회 문제를 풀면서 궁금증이 생겼다. BufferedReader로 받아온 String을 char 자료형으로 변환하는 것이 귀찮아서 Node 클래스의 name 필드 자료형을 String으로 지정하여 풀었는데, static void addNode(Node node, String head, String left, String right) { ..
썸네일 StringTokenizer StringTokenizer는 공백, 탭, 새 줄 등의 구분자( \n, \t, \r, \f )를 기준으로 String을 나눌 때 사용하는 클래스이다. nextToken() nextToken()은 StringTokenizer 에서 다음 토큰을 불러오는 메서드이다. BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer stk = new StringTokenizer(br.readLine()); System.out.print(stk.nextToken()); System.out.print(stk.nextToken()); System.out.print(stk.nextToken()); input output A..
썸네일 좌표 정렬 Primitive Type (기본 자료형)은 부등호를 사용하면 간단하게 비교할 수 있었다. 하지만 어떤 기준에 따라 객체를 비교하게 된다면 부등호를 사용할 수는 없다. 아래 문제와 같이 좌표상의 점의 x, y좌표를 기준으로 정렬해야하는 경우가 그렇다. x좌표를 기준으로 오름차순 정렬하되 x좌표가 동일하다면 y좌표를 기준으로 오름차순 정렬하고자 한다. 이럴 때 사용하는 것이 Comparable Interface이다. 사용 방법은 다음과 같다. List 정렬 위한 Collections.sort(List)를 사용한다. 여러 필드를 가진 객체를 비교하기 위해 Comparable 를 implements 한다. 이후 compareTo를 Override 해 return 값으로 sort할 수 있도록 한다. import..