- 문제 : https://www.acmicpc.net/problem/1325

첫 번째 풀었을 때는 정답보고 30회 가량 시도했는데도 계속 안됐던 것 같은데 

이번엔 비교적 쉽게 푼 느낌이다 

 

자식노드를 중심으로 진행하고, 하나의 노드마다 방문한 노드 수를 리스트 인덱스에 저장한 뒤, 그 중에 최댓값을 가진 인덱스들을 오름차순으로 출력하는 걸로 이해했다 

visit 인덱스마다 진행한 깊이를 진행하려고했는데, 이렇게 하니까 메모리 초과가 발생했다 

그래서 풀이를 봤더니 visit는 매 노드마다 초기화하고, 다른 리스트에 각 노드의 깊이를 저장해서 진행하는 것 같아서 

그렇게 변형했더니 정답이 떴다 

시간이 꽤 오래걸렸던 문제다 

 

- 정답 풀이 : 

from collections import deque

n,m=map(int,input().split())
data=[[] for _ in range(n+1)]
for _ in range(m):
    a,b=map(int,input().split())
    data[b].append(a)

def bfs(v):
    visit=[0]*(n+1)
    visit[v]=1
    queue=deque()
    queue.append(v)
    while queue:
        x=queue.popleft()
        for i in data[x]:
            if not visit[i]:
                visit[i]=1
                count[v]+=1
                queue.append(i)                   

count=[0]*(n+1)
result=0
for i in range(1,n+1):
    bfs(i)
    result=max(result,max(count))
    
for i in range(1,n+1):
    if count[i]==result:
        print(i, end = ' ')

 

 

 

 

- 이렇게 풀면 메모리 초과난다(방문한 노드 처리 안 해줘서)

from collections import deque

n,m=map(int,input().split())
data=[[] for _ in range(n+1)]
for _ in range(m):
    a,b=map(int,input().split())
    data[b].append(a)

def bfs(v):
    visit[v]=1
    queue=deque()
    queue.append(v)
    while queue:
        x=queue.popleft()
        if len(data[v])!=0:
            for i in data[x]:
                visit[v]+=1
                queue.append(i)                   

visit=[0]*(n+1)
answer=''
result=0
for i in range(1,n+1):
    bfs(i)
    result=max(result,visit)
    
for i in range(1,n+1):
    if visit[i]==result:
        print(i, end = ' ')

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

[bfs/백준] 3184번 : 양  (0) 2022.08.05
[dfs/백준] 13023번 : ABCDE  (0) 2022.08.05
[bfs/백준] 1926번 : 그림  (0) 2022.08.03
[dfs/백준] 1068번 : 트리  (0) 2022.07.31
[dfs/백준] 9466번 : 텀 프로젝트  (0) 2022.07.31

+ Recent posts