Notice
Recent Posts
«   2024/09   »
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
Archives
관리 메뉴

교대최소제곱법

[코테준비] BFS, 0-1 BFS 본문

코딩테스트

[코테준비] BFS, 0-1 BFS

옐라크레 2023. 9. 9. 23:45

BFS 너비우선탐색 문제

최단거리를 구할때 사용

가장 먼저 찾아내는게 최단거리이다 -> BFS 사용이유

 

시간복잡도

N이 노드의 개수, E가 간선의 개수일 때

인접 리스트: O(N + E)

인접 행렬: O(N^2)

 

예제 풀이 프로세스

deque을 사용

  1. 입력값 받기
    1. 그래프크기
      N, M = map(int, input().split())
    2. 그래프 모양
      board = [list(map(int,input().split())) for _ in range(N)]
  2. 볼 위치파악
    1. for i for j append 구문으로 현위치를 파악하고
    2. from collection import deque에 넣어놓는다
    3. 방문여부를 기억하려면 넣어두기 visited[i][j] = 1
      • 이거로 장난 칠수도 있다
        기억했다가 안했다가를 바꾸는 문제도 있다
    4. 이때 카운트도 선언해둔다
  3. 탐색
    1. dx, dy를 활용해서 4방향을 for문으로 탐색
    2. 현재위치를 deque에서 뽑아온다
    3. 미래위치를 예상해본다
    4. 미래위치가 조건에 맞는지 확인
      • 이때 추가조건들을 넣어준다
    5. 미래위치가 이미 방문한 곳이었는지 확인
    6. 다 ok이면 deque랑 방문기록에 입력

 

예제 문제

[BOJ] 백준 - 16236 아기상어 (파이썬)

 

[BOJ] 백준 - 16236 아기상어 (파이썬)

백준 - 16236 아기상어 (파이썬)

velog.io

백준 알고리즘 13460: 구슬 탈출 2 (Python)

 

백준 알고리즘 13460: 구슬 탈출 2 (Python)

www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열

bgspro.tistory.com

 

+

0-1 bfs

13549번: 숨바꼭질 3

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때

www.acmicpc.net

-> 모든 거리가 0 또는 1인 경우 사용

 

이건 시간복잡도가 O(V+E)이다

 

가장 먼저 찾아내는게 최단거리 맞긴한데

위의 문제처럼 + - 의 순서를 주의해서 deque에 넣을 필요가 있음 -> 우선순위를 고려해야한다는 뜻

 

거리합이 0일때 큐를 앞쪽에 넣어주는게 포인트

 

[algorithm] 0-1 BFS

 

[algorithm] 0-1 BFS

0-1 BFS는 가중치가 0, 1로 주어진 그래프에서 최단경로를 찾아낼 수 있는 알고리즘입니다. 최단경로 알고리즘에는 다익스트라 알고리즘을 사용할 수 있지만, 시간 복잡도가 O(ElogE) 또는 O(ElogV)인

velog.io