문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/92343
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
- 백트래킹 문제
이진 트리 문제인가 싶었지만, dfs 사용하는 백트래킹 문제였다.
평소 재귀함수를 선호하지 않아서 그런지, 완전 탐색 백트래킹 문제임을 파악하는 것이 쉽지 않다.
양의 수와 늑대의 수를 매개변수로 넘겨주어, 양의 수가 늑대의 수와 같거나 클 때까지 반복한다.
answer = 0
def dfs(sheep, wolf, edges, visited, info):
global answer
if sheep > wolf :
answer = max(answer, sheep)
# 늑대의 수가 양의 수보다 같거나 크면 탐색 종료
else :
return
# 부모노드, 자식 노드
for p, c in edges:
# 부모노드는 방문했고, 자식 노드는 방문하지 않았으면
if visited[p] and not visited[c]:
visited[c] = True
# 양이면
if info[c] == 0 :
dfs(sheep+1, wolf ,edges, visited, info)
# 늑대이면
else :
dfs(sheep, wolf + 1, edges, visited, info)
visited[c] = False
def solution(info, edges):
global answer
visited = [False] * len(info)
visited[0] = True
# 루트는 무조건 양이므로
dfs(1, 0, edges ,visited, info)
return answer
'개발 > algorithm' 카테고리의 다른 글
[백준 12919번] A와 B 2 - python (0) | 2023.02.01 |
---|---|
[백준 1806번] 부분합 - python (0) | 2023.02.01 |
[백준 2167번] 2차원 배열의 합 - Python / 2차원 배열 누적합 (0) | 2023.01.17 |
[프로그래머스][level3] 등산 코스 정하기 - Python (0) | 2023.01.17 |
[프로그래머스][level3] 코딩 테스트 공부 - python (0) | 2023.01.17 |