반응형
문제
풀이
트리인지 확인하기 위해서 다음 2가지를 검사한다.
- Root가 1개인지 검사한다.
- V로 들어오는 간선이 2개 이상인지 확인한다.
트리는 Root가 1개이어야한다.
또한 V로 들어오는 간선도 1개이어야 한다.
2개 이상이면 사이클이 발생할 수도 있다.
문제에서는 트리의 노드 번호를 특정할 수 없으므로 배열을 사용할 수 없다.
그래서 Set을 이용해 문제를 해결했다.
코드
java
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
Set<Integer> destinations = new HashSet<>();
Set<Integer> departures = new HashSet<>();
boolean isTree = true;
int k = 1;
while (true) {
int u = sc.nextInt();
int v = sc.nextInt();
if (u < 0 && v < 0) {
break;
}
if (u == 0 && v == 0) {
if (departures.isEmpty()) {
sb.append("Case ").append(k++).append(" is a tree.\n");
continue;
}
int rootCnt = 0;
for (int vertex : departures) {
if (!destinations.contains(vertex)) {
rootCnt++;
}
}
if (rootCnt != 1) {
isTree = false;
}
sb.append("Case ").append(k++);
if (isTree) {
sb.append(" is a tree.\n");
} else {
sb.append(" is not a tree.\n");
}
destinations.clear();
departures.clear();
isTree = true;
continue;
}
if (!destinations.add(v)) {
isTree = false;
}
departures.add(u);
}
System.out.println(sb.toString());
}
}
반응형
'BOJ' 카테고리의 다른 글
BOJ 1158 - 요세푸스 문제 (1) | 2024.01.28 |
---|---|
백준 17472 - 다리 만들기 2 (1) | 2023.03.06 |
백준 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2022.11.18 |
백준 2559 - 수열 (0) | 2022.03.20 |
백준 2003 - 수들의 합 2 (0) | 2022.03.17 |