Baekjoon/DFS와 BFS

[백준] 2644 촌수계산 (실버2) / DFS, BFS (feat. 파이썬튜터)

2023. 4. 25. 21:23

문제요약

나의 코드 및 설명 01 - DFS

def dfs(s, count, temp_list): #방문한 노드를 temp_list에 담는다
    global ans
    if end in temp_list:
        ans = count
        return #리턴필수! 그래야 더 이상 다음 노드 안 담음!
    for i in graph[s]:
        if i not in temp_list: #temp_list에 i가 안 담겨 있다면
            dfs(i, count+1, temp_list+[i])

n = int(input())
start, end = map(int, input().split())
m = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)

ans = -1

dfs(start, 0, [start]) #초기 temp_list에는 시작 노드가 담겨있어야 한다
print(ans)

나의 코드 및 설명 02 - BFS

from collections import deque

def bfs(s,e):
    queue = deque()
    queue.append(s)
    visited[s] = 1
    while queue:
        node = queue.popleft()
        if node == e:
            return visited[node]-1
        for i in graph[node]:
            if visited[i] == 0:
                visited[i] = visited[node] + 1
                queue.append(i)
    return -1 #이게 실행된다면 촌수를 계산할 수 없는 거임

n = int(input())
start, end = map(int, input().split())
m = int(input())
graph = [[] for _ in range(n+1)]
for _ in range(m):
    x, y = map(int, input().split())
    graph[x].append(y)
    graph[y].append(x)
visited = [0]*(n+1)

print(bfs(start,end))

 

피드백

DFS와 BFS으로 풀어본 문제. 처음엔 시작 노드에서 목표 노드까지 깊게 탐색하는 식으로 문제를 풀면 될 것이라고 생각했고, 실제로 그렇게 풀어서 맞았다. DFS 함수 변수에 방문한 노드들을 담을 temp_list를 선언했고, temp_list에 목표 노드가 담겨있다면, ans를 count 변수 값으로 갱신하는 코드를 작성했는데, 주의할 점은 return 해주어야 한다는 것이다. 리턴을 해주지 않으면 계속해서 다음 노드를 담을 수 있고, ans 값이 1씩 증가하게 될 것이다! (파이썬 튜터를 통해 이해했다.) 

BFS으로도 풀어봤는데, 이 문제는 DFS, BFS 모두 적합한 문제인 것 같다.

temp_list의 마지막 요소에 3이 담겼을 때 꼭 리턴해주어야 한다!

'Baekjoon > DFS와 BFS' 카테고리의 다른 글

[백준] 4963 섬의 개수 (실버2) / DFS, BFS  (0) 2023.04.26
[백준] 5014 스타트링크 (실버1) / BFS  (2) 2023.04.25
[백준] 2583 영역 구하기 (실버1) / BFS  (0) 2023.04.23
[백준] 1697 숨바꼭질 (실버1) / BFS  (0) 2023.04.21
[백준] 1012 유기농 배추 (실버2) / BFS (방문체크 위치 정확히!)  (0) 2023.04.21
'Baekjoon/DFS와 BFS' 카테고리의 다른 글
  • [백준] 4963 섬의 개수 (실버2) / DFS, BFS
  • [백준] 5014 스타트링크 (실버1) / BFS
  • [백준] 2583 영역 구하기 (실버1) / BFS
  • [백준] 1697 숨바꼭질 (실버1) / BFS
hellosonic
hellosonic
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • 그리디
  • SWEA 파이썬
  • 파이썬
  • 파이썬 2529
  • 프로그래머스 데브코스
  • SWEA D2
  • 자바스크립트 기본기
  • SWEA
  • JS
  • 파이썬 1269
  • 이코테
  • 백준 18870
  • 파이썬 11478
  • 백준 1157
  • SWEA/D3
  • 프로그래머스
  • 파이썬 1436
  • 국비지원교육
  • 리액트 todolist
  • 백준
  • 코딩부트캠프
  • javascript ux
  • 프론트엔드 데브코스
  • 백준 5212
  • 구현
  • 파이썬 1946
  • 백준 14891
  • SWEA D3
  • 백준 2999
  • 자바스크립트

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
[백준] 2644 촌수계산 (실버2) / DFS, BFS (feat. 파이썬튜터)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.