Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

문제 031 : 양과 늑대 #99

Open
wants to merge 1 commit into
base: solutions
Choose a base branch
from
Open

문제 031 : 양과 늑대 #99

wants to merge 1 commit into from

Conversation

tiaz0128
Copy link
Contributor

소요시간

  • 하루 종일
  • 책을 보고 다시 공부

사용한 자료구조, 알고리즘

  • BFS(Breadth First Search)
  • Queue -> deque

해당 자료구조, 알고리즘을 사용한 근거

  • 우선은 최적의 해? 를 찾기 위한 방법
  • 이 문제를 풀기 위해서는 DFS , BFS 를 써야만 하는지 잘 모르겠다.
  • 다른 방법이 있는지 모르겠다.

어려웠던 구현 포인트

  • 트리는 그래프의 일종이라는 것을 따로 공부하면서 알게 됌
  • DFS, BFS 등에 대해서 전혀 모르는 상태에서는 문제를 풀 수 있는 방법을 전혀 생각해낼 수 없었다.
  • 방문한 노드를 다루는 visited set 이 어떻게 관리되는지 제대로 이해하기 어려웠다.
  • visited 의 변화에 대해서 좀 더 다시 정리해봐야 할꺼 같다.

구현한 코드의 시간 복잡도

  • $O(N^2)$

추가한 테스트 케이스와 그 이유

  • 없음

개선이 필요한 부분은?

  • 트리 문제는 그래프의 일종이라는 생각을 가지고 문제에 접근 해야겠다

Copy link
Contributor

👋 @tiaz0128 님 안녕하세요!
코딩 테스트 합격자 되기(파이썬 편) : 문제 031 를 풀고 있으시네요!
해당 문제의 책 페이지와 프로그래머스 링크를 알려드릴께요!

09장 트리
양과 늑대 ⭐⭐⭐⭐⭐
코딩 테스트 합격자 되기(파이썬 편) - p313
프로그래머스 link

  1. 테스트가 실패한 경우 다시 한번 문제를 풀어서 push 해보세요!
  2. 로컬에서 디버깅도 해보고 스스로 코멘트를 달면서 공부해보세요!
  3. 다시 한번 문제를 풀어서 push 해보세요!

@github-actions github-actions bot added the Pass 테스트에 성공했습니다. Merge 해주세요! label Feb 11, 2024
Copy link
Contributor

🎉 @tiaz0128 님. 축하 합니다!

문제 031 테스트를 통과하셨습니다!
solutons 브랜치에 Merge 해주세요!

도움이 필요한 사람들이 있으면 도와주세요! 소통하면서 더 성장 할 수 있는 좋은 기회입니다!
문제 031 - 도움주러 가기

Copy link
Contributor

✨ 아래의 코드는 테스트를 통과한 코드입니다.

from collections import deque


def build_tree(info, edges):

    tree = [[] for _ in info]

    for parent, child in edges:
        tree[parent].append(child)

    return tree


def bfs(info, tree):
    max_sheep = 0
    # 현재 위치, 양의 수, 늑대 수, 방문한 노드?
    queue = deque([(0, 1, 0, set())])

    while queue:
        current, sheep_count, wolf_count, visited = queue.popleft()
        max_sheep = max(max_sheep, sheep_count)
        visited.update(tree[current])

        for next_node in visited:
            if info[next_node] == 1:
                if sheep_count > wolf_count + 1:
                    queue.append(
                        (next_node, sheep_count, wolf_count + 1, visited - {next_node})
                    )
            else:
                queue.append(
                    (next_node, sheep_count + 1, wolf_count, visited - {next_node})
                )
    return max_sheep


def solution(info, edges):
    tree = build_tree(info, edges)
    # for idx, row in enumerate(tree):
    #     print(idx, row)

    return bfs(info, tree)

@tiaz0128 tiaz0128 changed the title 문제 031 : 문제 031 : 양과 늑대 Feb 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Pass 테스트에 성공했습니다. Merge 해주세요! 문제031
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant