(DFS & BFS) 백준 11725번 트리의 부모 찾기

DARTZ·2022년 5월 9일
0

알고리즘

목록 보기
46/135

DFS

import sys 
sys.setrecursionlimit(10**6) 
n = int(sys.stdin.readline()) 

graph = [[] for i in range(n+1)] 

for i in range(n-1): # 그래프를 만들어서 각 그래프 좌표에 연결 지점의 좌표를 넣는다.
	a, b = map(int, sys.stdin.readline().split()) 
    graph[a].append(b) 
    graph[b].append(a) 
    
visited = [0]*(n+1) 
arr = [] 

def dfs(s): # 연결되어 있는 지점들을 방문하고 현재 지점 = 부모 노드를 저장해놓는다.
	for i in graph[s]: 
    	if visited[i] == 0: 
        	visited[i] = s 
            dfs(i) 
            
dfs(1) 

for x in range(2, n+1): 
	print(visited[x])

BFS

import sys
from collections import deque

sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline

N = int(input())
graph = [[] for k in range(N + 1)]
visited = [False] * (N + 1)

for _ in range(N - 1):
    a, b = map(int, input().split())

    graph[a].append(b)
    graph[b].append(a)

queue = deque([1])

while queue:
    num = queue.popleft()

    for i in graph[num]:
        if visited[i] == False:
            visited[i] = num
            queue.append(i)

for i in range(2, N+1):
    print(visited[i])

핵심인 것은 처음에 2차원 배열로 나타냈었다.

graph = [[0 for i in range(N + 1)] for k in range(N + 1)]
for _ in range(N - 1):
    a, b = map(int, input().split())

    graph[a][b] = graph[b][a] = 1

하지만 이 문제는 노드의 개수가 최대 100,000개 이므로 이차원 배열에서 연결상태를 표시하게 되면 10만*10만 = 100억개의 칸을 사용하기 때문에 메모리 초과가 날 수 밖에 없어 append로 추가해주는 방식으로 변경했다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글