Posts [알고리즘] 프로그래머스 - FloodFill
Post
Cancel

[알고리즘] 프로그래머스 - FloodFill


문제

n x m 크기의 도화지에 그려진 그림의 색깔이 주어짐
같은 색깔은 같은 숫자로 나타남
그림에 있는 영역의 개수 구하기
n, m은 1이상 250이하인 정수
그림의 색은 1이상 30,000 미만인 정수


입출력 예시

nmimagesresult
23[[1, 2, 3], [3, 2, 1]]5


접근

2차원 배열에서의 BFS문제이다.
아직 검사하지 않은 좌표에서 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
import queue

dx = [0, 1, 0, -1]
dy = [-1, 0, 1, 0]
q = queue.Queue()
def solution(n, m, image):
    answer = 0
    for i in range(n):
        for j in range(m):
            if image[i][j] != -1:
                data = image[i][j]
                image[i][j] = -1
                q.put([i,j])
                image = bfs(data, image, n, m)
                answer += 1
    return answer

def bfs(data, image, n, m):
    while not q.empty():
        cur = q.get()
        for x, y in zip(dx, dy):
            nx = cur[0] + x
            ny = cur[1] + y
            if nx < 0 or nx >= n or ny < 0 or ny >= m:
                continue
            if image[nx][ny] != data:
                continue
            image[nx][ny] = -1
            q.put([nx,ny])
    return image


This post is licensed under CC BY 4.0 by the author.

[알고리즘] 프로그래머스 - 배달

[알고리즘] 프로그래머스 - 방문 길이