import numpy as np
def solution(info, edges):
N = len(info)
visited = np.zeros(N, dtype=int) # 노드 방문 여부를 저장하는 배열 (0: 미방문, 1: 방문)
visited[0] = 1 # 루트 노드는 항상 방문으로 설정
answer = [] # 최대 양의 개수를 저장할 리스트
def dfs(sheep, wolf):
if sheep > wolf: # 현재 양의 개수가 늑대의 개수보다 많은 경우
answer.append(sheep) # 최대 양의 개수를 갱신
else:
return # 양이 늑대보다 적거나 같은 경우, 더 이상 진행하지 않음
for i in range(len(edges)):
parent, child = edges[i] # 부모와 자식 노드를 가져옴
isWolf = info[child] # 현재 자식 노드가 늑대인지 양인지 확인
# 부모 노드는 이미 방문했고 자식 노드는 방문하지 않은 경우에만 진행
if visited[parent] and not visited[child]:
visited[child] = 1 # 자식 노드를 방문으로 설정
dfs(sheep + (isWolf == 0), wolf + (isWolf == 1))
visited[child] = 0 # 재귀 호출이 끝나면 다시 방문하지 않은 상태로 변경
dfs(1, 0) # 루트 노드에서 DFS 시작
return max(answer) # 최대 양의 개수 반환
오류가 있거나, 개선점이 있으면 언제든지 알려주세요!
'코딩 연습 > 프로그래머스 코드' 카테고리의 다른 글
윤년.py (0) | 2023.10.19 |
---|---|
개인정보 수집 유효기간.py (1) | 2023.10.19 |
사분면 고르기.py (0) | 2023.10.19 |