카테고리 없음
[프로그래머스]Lv3. 양과 늑대(Python)
cha_eyoon
2024. 3. 14. 22:49
https://school.programmers.co.kr/learn/courses/30/lessons/92343
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근
못 풀더라도 문제나 이해하자.
1. 양의 수가 늑대의 수보다 많은가? => 탐색 조건?
2. 이미 방문한 노드인가? => 체크
3. 처음 방문한 노드인가?
양이 늑대보다 많으면 양의 수를 결과 배열에 저장해서 max값 리턴
DFS 사용
- 현재까지 탐색한 양의 수, 늑대 수를 인자로 받기
- 탐색 시작 전, 양의 수가 늑대 수보다 많은지 확인
- edges 배열을 순회하며, 부모 노드가 방문한 상태이고 자식 노드가 미방문 상태이면
- 자식 노드를 방문 상태로 변경 후 양, 늑대 여부로 dfs 재귀 호출
- 재귀가 끝나면 다시 미방문 상태로 변경
코드
def solution(info, edges):
# 각 노드의 방문 여부 체크
visited = [0] * len(info)
answer = []
# 현재 양의 수, 늑대의 수
def dfs(sheep, wolf):
if sheep > wolf:
answer.append(sheep)
else:
return
for p, c in edges:
# 부모 노드가 방문한 상태, 자식 노드가 미방문 상태
if visited[p] and not visited[c]:
visited[c] = 1
if info[c] == 0: # 자식이 양이면
dfs(sheep+1, wolf)
else:
dfs(sheep, wolf+1)
visited[c] = 0
visited[0] = 1 # 루트 노드부터 탐색 시작
dfs(1, 0)
return max(answer)