카테고리 없음

07.22 TIL

rlarudals 2024. 7. 22. 21:01

 

오늘 푼 문제는 DFS와 BFS 를 동시에 출력하게한 문제를 풀었다.

import sys
from collections import deque
N, M, V = map(int, sys.stdin.readline().split()) # N = 정점의 개수, M = 간선의 개수, V = 탐색을 시작할 번호
graph = [[] for _ in range(N+1)]
for _ in range(M):
    a, b = map(int, sys.stdin.readline().split())
    graph[a].append(b)
    graph[b].append(a)

for i in range(1, N+1): # 탐색 순서 유지를 위한 그래프 정렬
    graph[i].sort()

def my_dfs(graph, V):
    visited = list() # 방문한 노드를 담을 배열
    stack = list() # 정점과 인접한 방문 예정인 노드를 담을 배열

    stack.append(V) # 처음에는 시작 노드 담아주고 시작하기.

    while stack: # 더 이상 방문할 노드가 없을 때까지.
        node = stack.pop() # 방문할 노드를 앞에서 부터 하나싹 꺼내기.

        if node not in visited: # 방문한 노드가 아니라면
            visited.append(node) # visited 배열에 추가
            # stack.extend(graph[node]) # 해당 노드의 자식 노드로 추가
            stack.extend(reversed(graph[node]))

    print(*visited)
    return visited

def bfs(graph, V):
    visited = deque()  # 방문한 노드
    need_visit = deque()  # 방문할 노드

    need_visit.append(V)

    while need_visit:
        node = need_visit.popleft()
        if node not in visited:  # 방문한 적이 없다면
            visited.append(node)  # 방문한 노드에 추가
            need_visit.extend(graph[node]) # 꺼낸 노드와 인접한 노드를 넣어줌

    print(*visited)
    return visited


my_dfs(graph, V)
bfs(graph,V)

 내가 짠 코드이다.

 

조금 많이 긴 것 같지만..... 그래도 푼게 어디냐 라 생각한다.

 

저 위 코드에서 내가 가장 중요하게 생각하는 부분은 

for i in range(1, N+1): # 탐색 순서 유지를 위한 그래프 정렬
    graph[i].sort()

 

이거라고 생각한다.

 

저 코드를 쓰지 않으니 어떤것은 출력이 맞게 나오지만, 어떤것은 출력이 제대로 나오지 않았는데 저걸 쓰니 바로 올바른 출력들이 나왔다.

 

 

내일은 이 문제를 가지고 TIL을 작성하겠다. 내일의 나 화이팅!