틀린 코드 5%
1. 인접리스트를 만들었었음 = 오름차순 정리를 위해 반복문 + 리스트를 반복해서 사용함 => 시간낭비
=> 인접행렬로 변경해서 해결
2. 예제 케이스는 다 맞았었음 하지만 dfs코드가 불안정했음
=> 바꿨음에도 문제 발생
def dfs(v):
visited_d[v] = 1
path.append(v)
for i in adjl[v]:
if visited_d[i]: continue
dfs(i)
# 1260 DFS 와 BFS 실버2
from collections import deque
def dfs(v):
if len(path) == m+1:
return
for i in adjl[v]:
if visited_d[i]: continue
visited_d[i] = 1
path.append(i)
dfs(i)
def bfs(v):
visited_b = [0] * (n + 1)
deq = deque()
deq.append(v)
visited_b[v] = 1
path_b = []
while deq:
value = deq.popleft()
path_b.append(value)
for i in adjl[value]:
if visited_b[i]: continue
visited_b[i] = 1
deq.append(i)
return path_b
n, m, v = map(int,input().split())
arr = []
adjl = [[] for _ in range(n+1)]
for i in range(m):
s,e = map(int,input().split())
arr.append((s,e))
arr.sort()
for i in range(m):
s,e = arr[i]
adjl[s].append(e)
adjl[e].append(s)
path = [v]
visited_d = [0] * (n+1)
visited_d[v] = 1
dfs(v)
print(*path)
print(*bfs(v))
정답 코드:
# 1260 DFS 와 BFS 실버2
from collections import deque
def dfs(v):
visited_d[v] = 1
path.append(v)
for i in range(1,n+1):
if not visited_d[i] and adjl[v][i]:
dfs(i)
def bfs(v):
visited_b = [0] * (n + 1)
deq = deque()
deq.append(v)
visited_b[v] = 1
path_b = []
while deq:
value = deq.popleft()
path_b.append(value)
for i in range(1,n+1):
if not visited_b[i] and adjl[value][i]:
visited_b[i] = 1
deq.append(i)
return path_b
n, m, v = map(int,input().split())
adjl = [[False] *(n+1) for _ in range(n+1)]
for i in range(m):
s,e = map(int,input().split())
adjl[s][e] = True
adjl[e][s] = True
path = []
visited_d = [0] * (n+1)
dfs(v)
print(*path)
print(*bfs(v))
'알고리즘 문제풀이' 카테고리의 다른 글
백준 1193 분수 찾기 Python 수학 실버 5 (0) | 2024.03.29 |
---|---|
백준 1920 수 찾기 Python 이진탐색 실버 4 (0) | 2024.03.29 |
백준 15657 N과 M (8) Python 백트래킹 실버 3 (1) | 2024.03.27 |
백준 1009 분산처리 Python 브론즈2 (0) | 2024.03.27 |
백준 1966 프린터 큐 Python 자료 구조 큐 실버 3 (1) | 2024.03.27 |