Post

백준 1388번 python 풀이 - 바닥 장식

문제 링크

1388번

해결책

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
import sys

N, M = map(int, sys.stdin.readline().rstrip().split())
floor = []

for i in range(N):
    temp_str = list(sys.stdin.readline().rstrip())
    floor.append(temp_str)

is_visited = [[False for i in range(M)] for j in range(N)]

ans = 0

dx = [1,-1,0,0]
dy = [0,0,1,-1]

for nx in range(N):
    for ny in range(M):
        if(is_visited[nx][ny] is False):
            is_visited[nx][ny] = True
            ans += 1
            stk = []
            stk.append((nx, ny))
            while stk:
                cur_x, cur_y = stk.pop()

                start = 0
                end = 0
                if floor[cur_x][cur_y] == "-":
                    start = 2
                    end = 4
                elif floor[cur_x][cur_y] == "|":
                    start = 0
                    end = 2
                for i in range(start, end):
                    nxt_x = cur_x + dx[i]
                    nxt_y = cur_y + dy[i]
                    if (-1 < nxt_x < N and -1 < nxt_y < M):
                        if is_visited[nxt_x][nxt_y] is False and floor[nxt_x][nxt_y] == floor[cur_x][cur_y]:
                            stk.append((nxt_x, nxt_y))
                            is_visited[nxt_x][nxt_y] = True

print(ans)

주석으로 달 설명

시험으로 제시된 문제 1번. dx, dy를 이용해서, 현재의 값에 따라 좌,우 혹은 상,하로 움직이며 탐색하게 되는 문제이다.

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