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 |