본문 바로가기
알고리즘 풀이/백준

[백준 1260] DFS와 BFS (python)

by char_lie 2023. 2. 23.
반응형

https://www.acmicpc.net/problem/1260

 

1260번: DFS와 BFS

첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사

www.acmicpc.net

DFS와 BFS 문제

요즘 DFS와 BFS를 집중적으로 연습 중이라 공부에 큰 도움이 된 문제!

문제 요구조건을 제대로 안읽어서 구현에 제대로 실패했던 문제, 다른 답을 보고나서 아! 했던..

내가 푼 정답코드

result = []
def dfs(n):
    visited1[n] = True
    print(n, end= ' ')
    for i in graph[n]:
        if not visited1[i]:
            dfs(i)

def bfs(n):
    result = []
    visited = [False]*(N+1)
    queue = [n]
    visited[n] = True
    while queue :
        a = queue.pop(0)
        if a not in result:
            result.append(a)
        for i in graph[a]:
            if not visited[i]:
                queue.append(i)
                visited[a] = True
    return result

import sys
N, M, V = map(int, sys.stdin.readline().split())
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(N+1):
    graph[i].sort()

visited1=[False]*(N+1)
dfs(V)
print()
print(*bfs(V))

사실 BFS는 어느정도 하다보니 적응돼서 금방금방 쓸 수 있었는데, DFS에서 애를 먹었다. 가장 기본이 되는 재귀로 구현해주면 되긴 했지만, stack으로 구현하는거에 아직 익숙하지 못해서 stack으로 구성하려다가 재귀로 진행해버렸다.

또 문제 조건에 가장 낮은 수부터 찾으라는 정렬 조건을 제대로 안읽어서 한참을 왜 안되지? 이러고 있던..😕😕


느낀점

BFS는 거진 이제 대부분 구현 잘 할 수 있을 정도가 됐다고 생각하는데, 오히려 DFS가 아직 부족함을 많이 느꼈다. BFS보다 DFS가 더 쉬운건데 이렇게 부족해도 되나? 싶을 정도긴하다.

또 오늘 다른 문제 풀때도 그러더니 문제 조건을 제대로 안읽어서 이상한 곳에서 시간 잡아먹었다. 문제를 제대로 읽고, 요구조건을 잘 확인하는 습관을 길러야겠다고 느꼈다.

이러다 역량평가 IM도 못따는거 아닌가몰라 😥

반응형

댓글