https://www.acmicpc.net/problem/11559
11559๋ฒ: Puyo Puyo
์ด 12๊ฐ์ ์ค์ ํ๋์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ค์๋ 6๊ฐ์ ๋ฌธ์๊ฐ ์๋ค. ์ด๋ .์ ๋น๊ณต๊ฐ์ด๊ณ .์ด ์๋๊ฒ์ ๊ฐ๊ฐ์ ์๊น์ ๋ฟ์๋ฅผ ๋ํ๋ธ๋ค. R์ ๋นจ๊ฐ, G๋ ์ด๋ก, B๋ ํ๋, P๋ ๋ณด๋ผ, Y๋ ๋ ธ๋์ด๋ค.
www.acmicpc.net
๋ฌธ์
๋ฟ์๋ฟ์์ ๋ฃฐ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋์ ์ฌ๋ฌ ๊ฐ์ง ์๊น์ ๋ฟ์๋ฅผ ๋๋๋ค. ๋ฟ์๋ ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ ์๋์ ๋ฐ๋ฅ์ด๋ ๋ค๋ฅธ ๋ฟ์๊ฐ ๋์ฌ ๋๊น์ง ์๋๋ก ๋จ์ด์ง๋ค.
- ๋ฟ์๋ฅผ ๋๊ณ ๋ ํ, ๊ฐ์ ์ ๋ฟ์๊ฐ 4๊ฐ ์ด์ ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋์ด ์์ผ๋ฉด ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋ฟ์๋ค์ด ํ๊บผ๋ฒ์ ์์ด์ง๋ค. ์ด๋ 1์ฐ์๊ฐ ์์๋๋ค.
- ๋ฟ์๋ค์ด ์์ด์ง๊ณ ๋์ ์์ ๋ค๋ฅธ ๋ฟ์๋ค์ด ์๋ค๋ฉด, ์ญ์ ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ ์ฐจ๋ก๋๋ก ์๋๋ก ๋จ์ด์ง๊ฒ ๋๋ค.
- ์๋๋ก ๋จ์ด์ง๊ณ ๋์ ๋ค์ ๊ฐ์ ์์ ๋ฟ์๋ค์ด 4๊ฐ ์ด์ ๋ชจ์ด๊ฒ ๋๋ฉด ๋ ํฐ์ง๊ฒ ๋๋๋ฐ, ํฐ์ง ํ ๋ฟ์๋ค์ด ๋ด๋ ค์ค๊ณ ๋ค์ ํฐ์ง์ ๋ฐ๋ณตํ ๋๋ง๋ค 1์ฐ์์ฉ ๋์ด๋๋ค.
- ํฐ์ง ์ ์๋ ๋ฟ์๊ฐ ์ฌ๋ฌ ๊ทธ๋ฃน์ด ์๋ค๋ฉด ๋์์ ํฐ์ ธ์ผ ํ๊ณ ์ฌ๋ฌ ๊ทธ๋ฃน์ด ํฐ์ง๋๋ผ๋ ํ๋ฒ์ ์ฐ์๊ฐ ์ถ๊ฐ๋๋ค.
๋จ๊ท๋ ์ต๊ทผ ๋ฟ์๋ฟ์ ๊ฒ์์ ํน ๋น ์ก๋ค. ์ด ๊ฒ์์ 1:1๋ก ๋ถ๋ ๋์ ๊ฒ์์ด๋ผ ์ ์๋ ๊ฒ๋ ์ค์ํ์ง๋ง, ์๋๋ฐฉ์ด ํฐ๋จ๋ฆฐ๋ค๋ฉด ์ฐ์๊ฐ ๋ช ๋ฒ์ด ๋ ์ง ๋ฐ๋ก ํ์ ํ ์ ์๋ ๋ฅ๋ ฅ๋ ํ์ํ๋ค. ํ์ง๋ง ์์ง ์ค๋ ฅ์ด ๋ถ์กฑํ์ฌ ๋จ๊ท๋ ์๊ธฐ ํ๋์๋ง ์ ๊ฒฝ ์ฐ๊ธฐ ๋ฐ์๋ค. ์๋๋ฐฉ์ ํ๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ฐ์๊ฐ ๋ช ๋ฒ ์ฐ์์ผ๋ก ์ผ์ด๋ ์ง ๊ณ์ฐํ์ฌ ๋จ๊ท๋ฅผ ๋์์ฃผ์!
์ ๋ ฅ
์ด 12๊ฐ์ ์ค์ ํ๋์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ฉฐ, ๊ฐ ์ค์๋ 6๊ฐ์ ๋ฌธ์๊ฐ ์๋ค.
์ด๋ .์ ๋น๊ณต๊ฐ์ด๊ณ .์ด ์๋๊ฒ์ ๊ฐ๊ฐ์ ์๊น์ ๋ฟ์๋ฅผ ๋ํ๋ธ๋ค.
R์ ๋นจ๊ฐ, G๋ ์ด๋ก, B๋ ํ๋, P๋ ๋ณด๋ผ, Y๋ ๋ ธ๋์ด๋ค.
์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํ๋๋ ๋ฟ์๋ค์ด ์ ๋ถ ์๋๋ก ๋จ์ด์ง ๋ค์ ์ํ์ด๋ค. ์ฆ, ๋ฟ์ ์๋์ ๋น ์นธ์ด ์๋ ๊ฒฝ์ฐ๋ ์๋ค.
์ถ๋ ฅ
ํ์ฌ ์ฃผ์ด์ง ์ํฉ์์ ๋ช์ฐ์๊ฐ ๋๋์ง ์ถ๋ ฅํ๋ค. ํ๋๋ ํฐ์ง์ง ์๋๋ค๋ฉด 0์ ์ถ๋ ฅํ๋ค.

๋ฌธ์ ํ์ด
- ์ฃผ์ํ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ฒ์ BFS์ง๋ง, ๊ตฌํ์ด๋ ์๋ฎฌ๋ ์ด์ ์ด๋ผ๊ณ ๋ด๋ ๋ฌด๋ฐฉํ ์ ๋๋ก ๋ฐ์ง ๊ฒ์ด ๋ง์ ๋ฌธ์ ์๋ค!
- ์ฐ์ , ๋ฟ์๋ฟ์๊ฐ ์์์ ์๋๋ก ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ํ๋ ์ ๋ฐ์ดํธ๋ฅผ ๋จ์ํ pop๊ณผ insert๋ก ๊ตฌํํ๊ธฐ ์ํด์ ์์ ์ ํ๋๋๋ก 12ํ 6์ด๋ก ์ ์ฅํ์ง ์๊ณ , 6ํ 12์ด๋ก ์ ์ฅํ๋ค. (์ฆ, ํ ์ด์ฉ ํ์ผ๋ก ์ ์ฅํ๋ค.)
- while๋ฌธ์ ๋๋ฉด์, BFS๋ฅผ ์ด์ฉํด์ ํ์ฌ ํ๋์์ ์ฐ์๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ๋ค์ ์ฐพ๋๋ค.
- BFS๋ก ํ์ํ์ ๋ 4๊ฐ ์ด์์ ๋ฌธ์๊ฐ ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ๋ผ๋ฉด visited ๋ฐฐ์ด์ ๊ทธ๋๋ก ๋๊ณ , True๋ฅผ ๋ฐํํ๋ค.
- ์ํ์ข์ฐ๋ก ์ฐ๊ฒฐ๋ ๋ฌธ์๊ฐ 4๊ฐ ๋ฏธ๋ง์ด๋ผ๋ฉด ์ฐ์๊ฐ ์ผ์ด๋์ง ์์ผ๋ฏ๋ก, BFS ํ์ ๊ณผ์ ์์ 1๋ก visited ๊ฐ์ด ๋ณ๊ฒฝ๋ ์์น์ ๊ฐ๋ค์ ๋ค์ 0์ผ๋ก ๋ณต๊ตฌํ๊ณ , False๋ฅผ ๋ฐํํ๋ค.
- ์ด๋ฌํ ๊ณผ์ ์ ๊ฑฐ์ณ์ ํ์ฌ ํ๋์์ ์ฐ์๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ๋ค์ ๋ชจ๋ visited ๋ฐฐ์ด์ ํ์ํด๋จ๋ค๋ฉด, isProcessd ๊ฐ์ด True์ธ ๊ฒฝ์ฐ, ์ฆ BFS๊ฐ ์ฐ์๊ฐ ๊ฐ๋ฅํ ๋ถ๋ถ์ ๋ฐ๊ฒฌํด์ True๋ฅผ ๋ฐํํ ๊ฒฝ์ฐ field_update ํจ์๋ฅผ ์ด์ฉํด์ visited๋ฅผ ํ์ํ๋ฉด์ ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ ํด๋น ์์น์ ์์๋ฅผ ์ญ์ ํด์ฃผ๊ณ , ๋งจ ์์ '.'์ ์ถ๊ฐํ๋ฉด ๋ฟ์๋ฟ์๊ฐ ์์์ ์๋๋ก ๋จ์ด์ง๋ ํจ๊ณผ๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฐ์์ ๊ฐ์๋ฅผ +1ํด์ค๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ ๋ฐ์ดํธ๋ ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ for๋ฌธ์ ๋๋ฉด์ ์ฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ์ ์ฐพ๊ณ , ์์ ๊ฐ์ด ์ฐ์ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
- ๋ ์ด์ ์ฐ์ํ ์ ์๋ ๋ถ๋ถ์ด ์๋ค๋ฉด for๋ฌธ ํ์์ ๋๋ด๊ณ ๋ isProcessed๊ฐ False์ผ ๊ฒ์ด๋ฏ๋ก, repeat๋ฅผ False๋ก ๋ฐ๊ฟ์ฃผ๊ณ while๋ฌธ์ ์ข ๋ฃํ๋ค.
import sys
from collections import deque
field=[[] for _ in range(6)]
# 12๊ฐ์ ํ์ผ๋ก ์ด๋ฃจ์ด์ง ํ๋๊ฐ ์๋๋ผ, ์ด์ ๊ธฐ์ค์ผ๋ก 6๊ฐ์ ํ์ผ๋ก ํ๋๋ฅผ ๋ง๋ฆ(field ์
๋ฐ์ดํธ๋ฅผ pop์ผ๋ก ๊ฐ๋จํ๊ฒ ํ๊ธฐ ์ํด์)
for _ in range(12):
line=list(sys.stdin.readline().strip())
for idx in range(6):
field[idx].append(line[idx])
def field_update(visited):
global field
for i in range(6):
for j in range(12):
if visited[i][j]==1:
field[i].pop(j)
field[i].insert(0,'.')
def BFS(i,j):
global visited
queue=deque()
queue.append((i,j))
visited[i][j]=1
delete_list = []
delete_list.append((i,j))
color=field[i][j]
directions=[(0,1),(1,0),(0,-1),(-1,0)]
while queue:
y,x=queue.popleft()
for di in directions:
dy=y+di[0]
dx=x+di[1]
if 0<=dy<6 and 0<=dx<12 and visited[dy][dx]==0 and field[dy][dx]==color:
queue.append((dy,dx))
visited[dy][dx]=1
delete_list.append((dy,dx))
if len(delete_list)>=4:
return True
else:
# ์ฐ์๊ฐ ์ผ์ด๋์ง ์์๋ค๋ฉด visited ์์ ๋ณต๊ตฌ
for y,x in delete_list:
visited[y][x]=0
return False
ans=0
repeat=True
while repeat:
isProcessed = False
visited = [[0] * 12 for _ in range(6)]
for i in range(6):
for j in range(12):
if field[i][j] != '.' and visited[i][j]==0:
if BFS(i,j):
isProcessed=True
# ๋ชจ๋ ์์น ํ์ํด๋ BFS๊ฐ True๊ฐ ์๋์ค๋ ๊ฒฝ์ฐ
if isProcessed==False:
repeat=False
else:
# 1 ์ฐ์๊ฐ ๋๋๋ฉด field update
field_update(visited)
ans+=1
print(ans)
'์๊ณ ๋ฆฌ์ฆ > ๊ตฌํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 2628 ๐ฅ] ์ข ์ด์๋ฅด๊ธฐ (0) | 2023.10.08 |
---|---|
[๋ฐฑ์ค 20006 ๐ฅ] ๋ญํน์ ๋๊ธฐ์ด (1) | 2023.10.07 |
[๋ฐฑ์ค 3758 ๐ฅ] KCPC (0) | 2023.10.07 |
[๋ฐฑ์ค 3967 ๐ฅ] ๋งค์ง ์คํ (0) | 2023.10.07 |
[๋ฐฑ์ค 1138 ๐ฅ] ํ ์ค๋ก ์๊ธฐ (0) | 2023.09.12 |