😁 빅데이터 문제 풀기 & Study/- BAEKJOON 문제

[1260번] DFS와 BFS / python3 (feat.이코테 유튜브 강의)

또방91 2021. 11. 5. 11:37
728x90

문제 링크: 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... 처음 보는 단어 등장

 

재택하는 남편님께 물어보니

깊이우선 탐색, 너비우선 탐색이라는 말을 꺼내기시작하는데.......

나의 공부 부족함을 바로 느끼고 유튜브에서 바로 강의를 찾아보기로 했다.

 

 

 

이렇게 샛길 공부를 마치고 난 뒤 스타투 START

샛길공부 링크: 1) https://coding-nurse.tistory.com/22

 

[샛길공부] DFS와 BFS (feat. 이코테 유튜브강의)

백준 문제를 풀다가 갑자기 처음보는 모르는 단어를 마주치면서 시작한 공부 문제 풀기는 아래 참고 👇👇👇 https://coding-nurse.tistory.com/21?category=975166 * 강의 채널 : 동빈나 * 강의 이름 : (이코.

coding-nurse.tistory.com

2) https://coding-nurse.tistory.com/26

 

[샛길공부] DFS와 BFS 문제풀기 (feat. 이코테 유튜브강의)

영상 00:42:43 부터 시작되는 문제풀이! * 강의 채널 : 동빈나 * 강의 이름 : (이코테 2021 강의 몰아보기) 3. DFS & BFS * 강의 링크 : https://youtu.be/7C9RgOcvkvo  🧵 문제 1. 음료수 얼려먹기  ❗..

coding-nurse.tistory.com


❌ 1~3차시도 실패

강의만 듣고 풀기에는 역시나 바로 적용해서 풀기에는 시간이 실수가 많았다.

맵 프레임을 그리고, 자료를 입력하는 것까진 수월하였으나 바로 적용해서 하기엔 무리데쓰😂

다른 분의 자료를 참고하여 나만의 식으로 풀기 시작하였다.

https://yoonsang-it.tistory.com/59

 

백준 1260번 파이썬 풀이: DFS와 BFS

백준 1260번 DFS와 BFS 알고리즘 분류: 그래프 이론, 그래프 탐색, 너비 우선 탐색, 깊이 우선 탐색 링크: www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개..

yoonsang-it.tistory.com


❓ 정답은 ??

dfs와 bfs 두개를 구하는 만큼 역시나 길다~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 정점번호 작은것부터 방문 
# 정점개수n, 사이 선개수m, 시작정점번호v
# 첫째줄 DFS 결과 방문순서
# 둘째줄 BFS 결과 방문순서
 
n,m,v=map(int,input().split())
graph=[[0]*(n+1for _ in range(n+1)]   #맵 프레임 만들기
visit=[0*(n+1)    #방문한 정점 체크 리스트
 
#맵 프레임에 자료 입력
for _ in range(m): 
    m1,m2=map(int,input().split())
    graph[m1][m2] = graph[m2][m1]=1
  
#dfs 깊이우선 탐색
def dfs(x):     #x부터 시작
    visit[x]=1      #방문한 정점은 1로 체크
    print(x,end=" ")     #방문한 정점 출력  
    for i in range(1,n+1):  
        # 조건: (방문하지 않아서 visit 리스트에 0으로 체크) 
        # and (맵에서 연결되어있다고 1이라고 표시되있는 경우)
        if visit[i]==0 and graph[x][i]==1:  
            dfs(i)  #계속 이어서 진행
 
 
#bfs 넓이우선 탐색
from collections import deque
 
def bfs(x):     #x부터 시작
    que=deque()
    que.append(x)     #연결된 정점넣을 리스트
    visit[x]=1      #방문한 정점은 1로 체크
 
    while que:
        x=que.popleft()     #왼쪽부터 꺼내기
        print(x,end=" ")     #방문한 정점 출력
        for i in range(1,n+1):
            #조건: (방문하지 않아서 리스트에 0으로 체크)
            #and (맵에서 연결되어있다고 1이라고 표시되있는 경우)
            if visit[i]==0 and graph[x][i]==1:
                que.append(i)   #조건만족하면 연결정점리스트에 넣기
                visit[i]=1      #그 다음 방문할 i정점에 방문했다고 1 표시
 
 
dfs(v)
print()     #줄바꿈하고
 
visit=[0]*(n+1#다시 깨끗하게 리스트 만들고
bfs(v)
cs

💯 풀이 과정

참고한 분의 bfs를 보면 큐형 자료 .popleft( )를 사용하기보다 .pop(0)으로 꺼내는 새로운 방법을 알게됨!

그래도 배운 것대로 해보자규⭐

주석처리로 나름 자세하게 적으면서 식을 적어내려봤다.


😎오늘의 한줄평: dfs, bfs 까먹기 전 더 비슷한 문제 풀어보기!

728x90