[백준] 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) N
      • study (0)
        • 아파치 카프카 애플리케이션 프로그래밍 with 자.. (0)
      • Live Study (15)
      • Programming (14)
        • Java (8)
        • Python (1)
        • Springboot (5)
        • MSA (0)
      • 알고리즘 (117)
        • 백준 (58)
        • 프로그래머스 (59)
      • 에러로그 (5)
      • 항해99 (23)
      • 면접 (1)
      • 프로젝트 (1)
      • CS (20) N
        • 네트워크 (2)
        • 운영체제 (2)
        • 데이터베이스 (2)
        • 컴퓨터구조 (1)
        • Java (8)
        • Spring (5) N
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바