728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/92343?language=python3
최종 코드
from collections import defaultdict
def dfs(node, sheep, wolf, visit, can_go):
global answer, infos, tree
visit[node] = 1
can_go += tree[node]
if infos[node]: wolf += 1
else: sheep += 1
if wolf >= sheep: return
if sheep > answer: answer = sheep
for n in can_go:
go = [nn for nn in can_go if nn != n and not visit[nn]]
dfs(n, sheep, wolf, visit[:], go)
def solution(info, edges):
global answer, infos, tree
infos = info
answer = 0
tree = defaultdict(list)
for p, c in edges:
tree[p].append(c)
visit = [0]*len(info)
dfs(0, 0, 0, visit, [])
return answer
풀이 과정
from collections import defaultdict
def dfs(node, sheep, wolf, visit, can_go):
global answer, infos, tree
#현재 노드 방문 처리
visit[node] = 1
#현재 노드의 자식 노드들을 can_go에 추가한다
can_go += tree[node]
#현재 노드에 있는 늑대나 양 카운팅
if infos[node]: wolf += 1
else: sheep += 1
#늑대가 양보다 많으면, 더이상 탐색하지 않는다
if wolf >= sheep: return
#현재 양의 수가 최댓값이라면 갱신
if sheep > answer: answer = sheep
#갈 수 있는 노드로 탐색을 이어간다
for n in can_go:
#노드n을 can_go에서 제외해준다
go = [nn for nn in can_go if nn != n and not visit[nn]]
dfs(n, sheep, wolf, visit[:], go)
def solution(info, edges):
global answer, infos, tree
infos = info
answer = 0
#tree[p] = p의 자식 노드 번호
tree = defaultdict(list)
for p, c in edges:
tree[p].append(c)
visit = [0]*len(info)
dfs(0, 0, 0, visit, [])
return answer
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 3 블록 이동하기 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.05.06 |
---|---|
Level 3 파괴되지 않은 건물 <2022 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.05.06 |
Level 3 카드 짝 맞추기 <2021 KAKAO BLIND RECRUITMENT> Python3 (0) | 2022.05.06 |
Level 3 광고 삽입 <2021 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.05.05 |
Level 3 외벽 점검 <2020 KAKAO BLIND RECRUITMENT> Python 3 (0) | 2022.04.07 |