[Python] 11437번 LCA

2025. 12. 12. 02:55·coding test/Baekjoon

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

import sys
sys.setrecursionlimit(int(1e5)) #런타임 오류 피하기

N=int(input()) # 노드 개수

# 그래프 정보 저장하기
graph=[[] for _ in range(N+1)]
for _ in range(N-1):
    v,u=map(int,input().split())
    graph[v].append(u)
    graph[u].append(v)

parent=[0]*(N+1) # 각 노드의 이전 부모
d=[0]*(N+1) # 각 노드의 루트까지의 거리
visited=[0]*(N+1) # 각 노드의 방문 표시

# 각 노드의 깊이 구하기
def dfs(x,depth): 
    visited[x]=True
    d[x]=depth
    for y in graph[x]:
        if visited[y]: # 방문했으면 넘어가기
            continue
        parent[y]=x
        dfs(y,depth+1)

# 공통 조상 구하기
def LCA(a,b):
    # 깊이 맞추기
    while d[a]!=d[b]:
        if d[a]>d[b]:
            a=parent[a]
        else:
            b=parent[b]
    # 노드 거슬러 올라가기
    while a!=b:
        a=parent[a]
        b=parent[b]
    return a

dfs(1,0)

M=int(input()) # 가장 가까운 공통 조상을 알고싶은 쌍의 개수
for _ in range(M):
    a,b=map(int,input().split())
    print(LCA(a,b))

 

`sys.setrecursionlimit`를 설정해주지 않으니까 런타인 에러가 났는데 추가하니 해결되었다.

근데 `sys.setrecursionlimit`를 꼭 해야하나?

이는 문제에서 N의 조건이 2 ≤ N ≤ 50,000으로 만약 편향 트리(skewed tree)일 경우 DFS 호출 깊이가 최악에서 50,000까지 갈 수 있기 때문이다. 파이썬의 기본 재귀 한도는 약 1,000이기 때문에 DFS를 하면 무조건 재귀 깊이 초과가 발생한다. 때문에 `sys.setrecursionlimit`을 통해 recursionlimit을 증가가 필수적이다.

'coding test > Baekjoon' 카테고리의 다른 글

[Python] 11438번 LCA 2  (0) 2025.12.15
[Python] 3584번 가장 가까운 공통 조상  (0) 2025.12.13
[Python] 1753번 최단경로  (0) 2025.10.15
[Python] 1715번 카드 정렬하기  (2) 2025.08.30
[Python] 16236번 아기 상어  (1) 2025.07.01
'coding test/Baekjoon' 카테고리의 다른 글
  • [Python] 11438번 LCA 2
  • [Python] 3584번 가장 가까운 공통 조상
  • [Python] 1753번 최단경로
  • [Python] 1715번 카드 정렬하기
wish404
wish404
자동 로그
  • wish404
    wish-log
    wish404
    • 홈
    • 태그
    • 방명록
    • github
    • 분류 전체보기 (75) N
      • log (8)
        • 블로그 관리 (5)
        • 에러 모음 (2)
      • coding test (47)
        • Algorithm (4)
        • Baekjoon (34)
        • SW Expert Academy (6)
        • etc (3)
      • 프로그래밍 언어 (7)
        • JAVA (7)
      • 데이터 엔지니어링 (5)
        • Kafka (0)
        • Spark (4)
        • Airflow (1)
        • Elasticsearch (0)
      • 머신러닝&딥러닝 (3)
        • Kaggle 스터디 (3)
        • 논문 리뷰 (0)
        • MLOps (0)
      • 신입 개발자가 되기까지 (5) N
        • 취준일기 (1)
        • SSAFY (2)
        • 프로젝트 (1) N
        • CS 공부 (1)
  • 인기 글

  • 태그

    그리디
    후위순회
    중위순회
    dfs
    다익스트라
    그리디 알고리즘
    전위순회
    플로이드워샬
    벨만포드
    복습해야지
    Dijkstra
    틀린문제
    싸피
    dp
    최단 경로
    heapq
    복습
    dijk
    BFS
    SSAFY
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
wish404
[Python] 11437번 LCA
상단으로

티스토리툴바