본문 바로가기

코딩테스트

코테 BFS

728x90

그래프 탐색 종류

  • BFS : Breadth-first search (너비 우선 탐색) : 자기 자식을 우선 탐색
  • DFS : Depth-first search (깊이 우선 탐색) : 자식의 자식을 먼저 탐색

 queue)= BFS

stack = DFS

 

아이디어

  • 시작점에 연결된 vertex 찾기
  • 찾은 vertex를 queue에 저장
  • queue 의 가장 먼저 것 뽑아서 반복

queue는 파이프 같이 생각 자료구조, 들어온 순서대로 나가게 됨 -> 123123

stack 은 한쪽이 막힌 파이트 같은 자료고조, 들어온 곳으로 나가게 됨 -> 123321

 

시간 복잡도

시간 복잡도란? : 알고리즘이 얼마나 오래 걸리는지

BFS : O( vertex +Edge)

 

라이브코딩

  • 아이디어 >
    • 2중 for -> 값 1 && 방문 X -> BFS
    • BFS 돌면서 그림 개수 +1,  최대값을 갱신류
  • BFS : Breadth-first search (너비 우선 탐색) : 자기 자식을 우선 탐색
  • DFS : Depth-first search (깊이 우선 탐색) : 자식의 자식을 먼저 탐색
  •  queue)= BFS

stack = DFS

 

 

 

아이디어

 

시작점에 연결된 vertex 찾기

찾은 vertex를 queue에 저장

queue 의 가장 먼저 것 뽑아서 반복

queue는 파이프 같이 생각 자료구조, 들어온 순서대로 나가게 됨 -> 123123

 

stack 은 한쪽이 막힌 파이트 같은 자료고조, 들어온 곳으로 나가게 됨 -> 123321

 

 

 

시간 복잡도

 

시간 복잡도란? : 알고리즘이 얼마나 오래 걸리는지

 

BFS : O( vertex +Edge)

 

 

 

라이브코딩

 

아이디어 >

2중 for -> 값 1 && 방문 X -> BFS

BFS 돌면서 그림 개수 +1, 최대값을 갱신

  • 시간복잡도
    • BFS : O(V+E) = V + 4V = 5V = 5 * M * N (M, N = 500 -> 문제에서 n(1<_ n <_ 500) ) 
    • V : M * N = 500 * 500
    • E : V * 4 = 4 * 500 * 500
    • V + E : 5 * 250000 = 100만 < 2억 ->> 가능!
  • 자료구조
    • 그래프 전체 지도 : int[][]
    • 방문 여부 : bool[][]
    • Queue( BFS )

 

백준 1926번

import sys
import = sys.stdin.readline

n, m = map(int, input().split() )
map = [list(map(int, input().split())) for _ in range(n)]
chk = [[False] * m for _ in range(n)]


dy = [0,1,0,-1]
dx = [1,0,-1,0]
def bts(y, x):
    rs = 1
    q = [(y, x)]
    while q:
        ey, ex = q.pop()
        for k in range(4):
            ny = ey + dy[k]
            nx = ex + dx[k]
            if 0<= ny <n and 0 <=nx < m:
               if map[ny][nx] == 1 and chk [ny][nx] == False:
                   rs += 1
                   chk]ny][nx] = True
                   q.append((ny, nx))
    return rs

cnt = 0
maxv = 0
for j in range(n):
    for i in range(m):
        if map[j][i] == 1 and chk[j][i] == False:
        ch[j][i] = True
        # 전체 그림 갯수를 +1
        cnt += 1
        # BFS > 그림 크기를 구해주고
        # 최대값 갱신
        maxv = max(maxv, bfs(j,i))

print(cnt)
print(maxv)

 

728x90

'코딩테스트' 카테고리의 다른 글

백준 1620 : 나는야 포켓몬 마스터 이다솜  (0) 2025.03.06
코테 DFS  (0) 2025.02.10
백준 2869 : 달팽이는 올라가고 싶다.  (1) 2024.09.26
백준 1193 : 분수찾기  (0) 2024.09.26
백준 1062번 가르침  (0) 2024.09.24