본문 바로가기
알고리즘/python

11559번 Puyo Puyo(python3)

by 펀구구 2022. 2. 18.

https://www.acmicpc.net/problem/11559

 

11559번: Puyo Puyo

총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다.

www.acmicpc.net

뿌요뿌요 게임을 구현해 보는 문제다.

bfs로 4개 이상 연결된 블록들을 찾아내서 ' . '으로 바꿔주고 ' . '으로 바뀐 부분을 채워주면 된다.

import sys
from collections import deque

data = []
for _ in range(12):
    temp = input()
    temp2 = []
    for i in temp:
        temp2.append(i)
    data.append(temp2)

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


def bfs(a, b):
    temp_data = [[0] * 6 for _ in range(12)]
    queue = deque()
    queue.append((a, b))
    temp_data[a][b] = 1
    visited[a][b] = 1
    count = 1
    while queue:
        x, y = queue.popleft()

        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < 12 and 0 <= ny < 6:
                if data[a][b] == data[nx][ny] and visited[nx][ny] == 0:
                    count += 1
                    temp_data[nx][ny] = 1
                    queue.append((nx, ny))
                    visited[nx][ny] = 1
    if count >= 4:
        for i in range(12):
            for j in range(6):
                if temp_data[i][j] == 1:
                    data[i][j] = '.'
        return 1
    return 0


flag = 1
ans = -1
while flag:
    ans += 1
    flag = 0
    visited = [[0] * 6 for _ in range(12)]
    for i in range(12):
        for j in range(6):
            if visited[i][j] == 0 and data[i][j] != '.':
                flag += bfs(i, j)
    flag2 = True
    while flag2:
        flag2 = False
        for i in range(11, 0, -1):
            for j in range(6):
                if data[i][j] == '.' and data[i - 1][j] != '.' and i != 1:
                    data[i][j] = data[i - 1][j]
                    data[i - 1][j] = '.'
                    flag2 = True
                elif data[i][j] == '.' and data[i - 1][j] != '.' and i == 1:
                    data[i][j] = data[i - 1][j]
                    data[0][j] = '.'
                    flag2 = True

print(ans)

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

5427번 불(python3)  (3) 2022.02.21
17144번 미세먼지 안녕!(python3)  (0) 2022.02.18
14888번 연산자 끼워넣기(python3)  (0) 2022.02.11
2573번 빙산(python3)  (0) 2022.02.06
16236번 아기상어(python3)  (0) 2022.02.06