본문 바로가기
알고리즘/알고리즘 설명

Udemy : 알고리즘 DFS, BFS, 백트래킹

by JayAlex07 2023. 3. 13.

Udemy : 알고리즘 DFS, BFS, 백트래킹

udemy 알고리즘 코딩 테스트

 

그래프 자료구조

그래프는 노드와 링크로 이루어진 자료구조다

노드는 점들이고, 노드를 이어주는 링크, Edge 또는 간선이라고 한다

img

 

SNS / 메신저 관계도를 그래프로 만들 수 있다

 

지도 / 네비게이션 같이 그래프를 실생활에 사용될 수 있다

 

무방향 또는 방향 그래프로 만들 수 있다

  • 무방향이나 양방향 그래프는 동일한 개념이다

 

 


 

 

트리 자료구조

순환성이 없는 무방향 그래프다

 

코드를 그래프로 나타날 때에는 인접 리스트와 행열을 만들 수 있다

 

 

연결 행

imgimg

 

연결 리스트

img


 

 

DFS (Depth First Search)

깊이 우선 탐색

  • 스택 또는 재귀를 사용해서 구현을 한다
  • DFS는 완전 탐색이다

img


 

 

 

BFS (Breadth First Search)

너비 우선 탐색

최단 거리를 구할 때에 유리할 수 있다

  • 완전 탐색이다
  • 큐를 이용해서 구현한다

img


 

 

백트래킹

 

모든 경우를 탐색한다

가지치기를 통해 탐색 경우의 수를 줄인다

  • 가능한 덜 탐색하는 것

 

 

 

문제 풀이

 

11724 연결 요소의 개수

  • DFS를 하며, DFS가 한번 끝날 때, 연결 요소 하나를 세어주면 된다
def dfs(start):
    for s in links[start]:
        if visited[s] == False:
            visited[s] = True
            dfs(s)

N, M = map(int, input().split())

visited = [False for _ in range(N + 1)]
links = [[] for n in range(N + 1)]

for m in range(M):
    a, b = map(int, input().split())
    links[a].append(b)
    links[b].append(a)

count = 0

for index in range(1, len(visited)):
    if visited[index] == False:
        dfs(index)
        count += 1

print(count)

 

 

2178 - 미로 탐색

from collections import deque

N, M = map(int, input().split())

matrix = [list(map(int, input())) for _ in range(N)]
visited = [[0] * M for _ in range(N)]

dr, dc = [-1, 0, 0, 1], [0, -1, 1, 0]


def bfs(r, c):
    queue = deque([(r, c)])
    visited[r][c] = 1

    while queue:
        row, column = queue.popleft()

        for i in range(4):
            sr, sc = row + dr[i], column + dc[i]

            if 0 <= sr < N and 0 <= sc < M:
                if matrix[sr][sc] == 1 and visited[sr][sc] == 0:
                    visited[sr][sc] = visited[row][column] + 1
                    queue.append((sr, sc))
                    
    return visited[N-1][M-1]


print(bfs(0,0))

'알고리즘 > 알고리즘 설명' 카테고리의 다른 글

Udemy : 동적 계획법 (DP)  (0) 2023.03.23
Udemy : 알고리즘 이분 탐색  (0) 2023.03.14
Udemy : 알고리즘 탐욕법  (0) 2023.03.10
Udemy : 알고리즘 완전탐색  (1) 2023.03.07
Udemy : 알고리즘 자료구조  (0) 2023.03.02