[백준] 15900번, 나무 탈출 (Python)

2021. 7. 21. 11:13·알고리즘/백준
728x90
반응형

문제

https://www.acmicpc.net/problem/15900

 

15900번: 나무 탈출

평소에 사이가 좋지 않던 성원이와 형석이가 드디어 제대로 한 판 붙으려고 한다. 성원이와 형석이 둘과 모두 똑같이 친한 인섭이가 대결 종목을 정해 가져왔다. 바로 '나무 탈출' 이라는 보드게

www.acmicpc.net

 

코드

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**5)

n = int(input())

answer = 0
graph = [[] for _ in range(n+1)]
visited = [False for _ in range(n+1)]
distance = [0 for _ in range(n+1)]
for i in range(n-1):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

def dfs(cur):
    visited[cur] = True
    for next in graph[cur]:
        if visited[next] == False:
        	# distance에는 루트노드부터 모든 노드까지에 거리를 갱신해준다.
            distance[next] = distance[cur] + 1 
            dfs(next)

dfs(1)

# 리프노드를 찾아줌
for i in range(2,n+1):
    if len(graph[i]) == 1:
        answer += distance[i]

if answer % 2 == 0:
    print("No")
else:
    print("Yes")

루트노드에서 dfs 탐색을해 모든 노드까지에 거리를 distance 배열에 저장해준다.

 

게임말이 리프노드에서 루트노드까지 올라가니까 루트노드에서 모든 리프노드까지에 거리를 더해주면 된다.

리프노드는 연결된 노드가 한개밖에 없으면 리프노드로 보면된다. 루트노드는 제외이기 때문에 for문은 2부터 돌아준다.

 

게임을 성원이부터 시작하기 때문에 answer값이 짝수일 경우 No, 홀수이면 Yes를 출력한다.

 

python3는 시간초과가 떠서 pypy로 제출했다.

맨처음에는 재귀 깊이를 sys.setrecursionlimit(10**6)으로 해줬는데 pypy에서 메모리초과가 나서

sys.setrecursionlimit(10**5)로 바꿔줬더니 통과하였다.

반응형
저작자표시 (새창열림)

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 11725번, 트리의 부모 찾기 (Python)  (0) 2021.07.21
[백준] 11403번, 경로 찾기 (Python)  (0) 2021.07.21
[백준] 10026번, 적록색약 (Python)  (0) 2021.07.16
[백준] 2583번, 영역 구하기 (Python)  (0) 2021.07.16
[백준] 4963번, 섬의 개수 (Python)  (0) 2021.07.15
'알고리즘/백준' 카테고리의 다른 글
  • [백준] 11725번, 트리의 부모 찾기 (Python)
  • [백준] 11403번, 경로 찾기 (Python)
  • [백준] 10026번, 적록색약 (Python)
  • [백준] 2583번, 영역 구하기 (Python)
wookcode
wookcode
공부한 내용들을 정리하고 기록하는 블로그입니다.
    반응형
  • wookcode
    wookcode
    wookcode
  • 전체
    오늘
    어제
    • 카테고리 (196)
      • study (1)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
        • 인프런 (1)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (19)
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스파르타코딩클럽
    코딩테스트
    해결
    항해99
    버그
    항해마켓
    인프런
    정리
    spring
    jpa
    백준
    실전프로젝트
    그리디
    카카오코딩테스트
    김영한
    SpringBoot
    프로그래머스
    조합
    괄호
    후기
    orm
    회고
    java
    에러
    파이썬
    알고리즘
    미니프로젝트
    카카오인턴
    SFlash
    브루트포스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
wookcode
[백준] 15900번, 나무 탈출 (Python)
상단으로

티스토리툴바