Algorithms/Simulation
6416 with 파이썬 (-)
Louisus
2020. 8. 12. 17:54
728x90
from collections import defaultdict
# 에러
# 루트 노드가 2개인 예외가 있을 수 있음
lst = []
while True:
temp = list(map(int, input().split()))
if temp:
if temp[-1] == -1 and temp[-2] == -1:
break
else:
lst.extend(temp)
temp = defaultdict(list)
cases = []
for i in range(0, len(lst), 2):
if lst[i] == 0 and lst[i+1] == 0:
cases.append(temp)
temp = defaultdict(list)
else:
temp[lst[i+1]].append(lst[i])
for i, case in enumerate(cases,1):
for v in case.values():
if len(v) > 1:
print("Case {} is not a tree.".format(str(i)))
break
else:
print("Case {} is a tree.".format(str(i)))
from collections import defaultdict
# 에러
lst = []
while True:
temp = list(map(int, input().split()))
if temp:
if temp[-1] == -1 and temp[-2] == -1:
break
else:
lst.extend(temp)
temp = defaultdict(list)
cases = []
for i in range(0, len(lst), 2):
if lst[i] == 0 and lst[i+1] == 0:
cases.append(temp)
temp = defaultdict(list)
else:
temp[lst[i+1]].append(lst[i])
a = dict()
for i, case in enumerate(cases, 1):
s = set()
check = True
for val in case.values():
# 들어오는 간선이 여러개인 경우 - 2번 조건 불만족
if len(val) > 1:
check = False
# # 루트 노드 개수 체크
for v in val:
if v not in case.keys():
s.add(v)
# 루트 노드가 1개 이상 - 1번 조건 불만족
if len(s) != 1:
check = False
if check:
print("Case {} is a tree.".format(i))
else:
print("Case {} is not a tree.".format(i)
from collections import defaultdict
# 에러
# 1. 루트 노드 존재 여부 및 루트 노드가 유일한지 확인
# 2. 진입 차수가 1
# 3. 엣지 + 1 = 노드수
lst = []
while True:
temp = list(map(int, input().split()))
if temp:
if temp[-1] == -1 and temp[-2] == -1:
break
else:
lst.extend(temp)
temp = defaultdict(list)
temp_node = set()
cases = []
node_cnt = []
for i in range(0, len(lst), 2):
if lst[i] == 0 and lst[i+1] == 0:
cases.append(temp)
node_cnt.append(temp_node)
temp = defaultdict(list)
temp_node = set()
else:
temp_node.add(lst[i])
temp_node.add(lst[i+1])
temp[lst[i+1]].append(lst[i])
for i, case in enumerate(cases, 1):
s = set()
check = True
node = len(node_cnt[i-1])
edge_cnt = 0
for val in case.values():
# 2번조건 - 들어오는 간선이 여러개인 경우
if len(val) > 1:
check = False
# # 루트 노드 개수 체크
for v in val:
edge_cnt += 1
if v not in case.keys():
s.add(v)
# 1번 조건
if len(s) != 1:
check = False
# 3번 조건
if (node - 1) != edge_cnt:
check = False
if check:
print("Case {} is a tree.".format(i))
else:
print("Case {} is not a tree.".format(i))