티스토리 뷰

문제

https://programmers.co.kr/learn/courses/30/lessons/92343

 

코딩테스트 연습 - 양과 늑대

[0,0,1,1,1,0,1,0,1,0,1,1] [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]] 5 [0,1,0,1,1,0,1,0,0,1,0] [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6],[3,7],[4,8],[6,9],[9,10]] 5

programmers.co.kr

 

풀이방법

https://tooo1.tistory.com/579

 

[프로그래머스] 코딩테스트 연습 : 양과 늑대 - PYTHON[파이썬]

https://programmers.co.kr/learn/courses/30/lessons/92343?language=python3 코딩테스트 연습 - 양과 늑대 [0,0,1,1,1,0,1,0,1,0,1,1] [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]]..

tooo1.tistory.com

< 아이디어 >

- 경로를 추가해가며 max(maxsheep, dfs())를 계속 비교해간다. == 현재 경로까지의 양의 갯수와 다음 경로까지의 양의갯수를 비교하면서 양<= 늑대가 아닌 경우 경로를 계속 추가해가며 maxsheep을 구한다.

** 꼭 한

 

 

< 배운점 >

- 백트래킹시 재귀함수에 대한 이해도가 올라갔다.

- 여전히 헷갈리고 어렵지만 중심 가닥은 잡을 수 있었다.

 

< 연습 >

def solution(info, edges):
  def nextNodes(v):
    temp = list()
    for i,j in edges:
      if i == v:
        temp.append(j)
        return temp
  
  def dfs(sheep, wolf, current, path):
    if info[current]:
      wolf += 1
    else:
      sheep += 1
    # 늑대가 다 잡아먹음, 무시
    if sheep <= wolf:
      return 0
      
    # 아니라면 임시 변수에 값 갱신
    maxSheep = sheep
    
    # 서칭 시작
    for p in path:
      for n in nextNodes(p):
        if n not in path:
          path.append(n)
          # 최대 양 판별
          maxSheep = max(maxSheep, dfs(sheep, wolf, n, path))
          -------------------------
          [dfs(1, 0, 1, [0,1]) == 0] X
          [max ( maxsheep,dfs(1, 0, 2, [0,2])
          maxsheep = 2
          for ([0,2])
            0 -> 1,2
            [0,2,1]
            max(maxsheep,dfs(1,[0,2,1]))
              [
                max(maxsheep,dfs(3,[0,2,1,3]))
                                    -> maxsheep = 3
                   [max(maxsheep,dfs(4,[0,2,1,3,4]))
                         [max(maxsheep,dfs(5,[0,2,1,3,4,5]) == 0) == 3 X
                          [max(maxsheep,dfs(6,[0,2,1,3,4,6])
                                                 -> maxsheep = 4
                               max(maxsheep,dfs(7,[0,2,1,3,4,6,7])
                                                 -> maxsheep = 5
                                                 -> pop! [0,2,1,3,4,6]
                                                 -> return 5
                               ]
                                           
                                                          
                   ]                 
              ]
          ]
          --------------------------
          path.pop()
    return maxSheep
          
  answer = dfs(0, 0, 0, [0])
  
  return answer
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함