반응형
나의 풀이
import sys
from collections import deque
sys.setrecursionlimit(12345)
input = sys.stdin.readline
que = deque()
dot,relat,start = map(int,input().split())
graph = [[]for i in range(dot+1)]
for i in range(relat):
fst,scd = map(int,input().split())
graph[fst].append(scd)
graph[scd].append(fst)
for i in range(1,dot+1):
if graph[i]:
graph[i].sort()
visit = [0 for i in range(dot+1)]
rstd = []
rstb = []
def dfs(idx):
rstd.append(idx)
for next in graph[idx]:
if not visit[next]:
visit[next] = 1
dfs(next)
def bfs():
while que:
cur=que.popleft()
rstb.append(cur)
for next in graph[cur]:
if not visit[next]:
visit[next]=1
que.append(next)
visit[start] = 1
dfs(start)
visit = [0 for i in range(dot+1)]
visit[start]=1
que.append(start)
bfs()
print(*rstd)
print(*rstb)
함수로 만들어 각각 한번씩 따로 실행되도록 만들었다.
다른 사람 풀이를 보니 print문을 사용하는게 자꾸 너무 아쉽다.
from collections import deque
import sys
input=sys.stdin.readline
n,m,v=map(int,input().split())
graph=[[] for _ in range(n+1)]
visit1=[0]*(n+1)
visit2=[0]*(n+1)
for i in range(m) :
a,b=map(int,input().split())
graph[b].append(a)
graph[a].append(b)
for i in range(1,len(graph)) :
graph[i].sort()
def dfs(x) :
visit1[x]=1
print(x,end=' ')
for i in graph[x] :
if visit1[i]==0 :
dfs(i)
def bfs(x) :
q=deque()
q.append(x)
visit2[x]=1
while q :
x=q.popleft()
print(x,end=' ')
for i in graph[x] :
if visit2[i]==0 :
q.append(i)
visit2[i]=1
dfs(v)
print()
bfs(v)
따로 변수에 방문한 정점의 값을 append하지 않고 바로 출력한다. print(end=" ")를 통해 출력 후 새 줄이 아닌 공백 한칸 띄우고 출력하게 만들었다.
끝에 print()는 의도적으로 \n을 만들어 dfs값과 bfs값을 나누게 하였다.
반응형
'알고리즘 문제들 으악 > 백준' 카테고리의 다른 글
| [python]2667번 단지번호 붙이기, str 정렬 순서 (0) | 2022.12.14 |
|---|---|
| [python]11279번 최대 힙, 힙 사용법 (0) | 2022.12.12 |
| [python]2606번 바이러스, 컴포넌트 확인 & 최적화 (0) | 2022.12.11 |
| [python]24444번 알고리즘 수업 - 너비 우선 탐색 1 (0) | 2022.12.10 |
| [python]24479번 알고리즘 수업 - 깊이 우선 탐색 1, 저장 변수 중요성 (0) | 2022.12.09 |