문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/84021
import copy
dx,dy = [1,-1,0,0], [0,0,-1,1]
def dfs(board,x,y,position,num, n):
result = [position]
board[x][y] = 2
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<n and board[nx][ny] == num:
board[nx][ny] = 2
result += dfs(board,nx,ny,[position[0]+dx[i], position[1]+dy[i]],num, n)
return result
def rotate(table):
n = len(table)
rotated = [[0]*n for _ in range(n)]
for i in range(n):
for j in range(n):
rotated[j][n-i-1] = table[i][j]
return rotated
def solution(game_board, table):
ans = 0
blank = []
n = len(game_board)
for i in range(n):
for j in range(n):
if game_board[i][j] == 0:
blank.append(dfs(game_board,i,j,[0,0],0,n))
for k in range(4):
table = rotate(table)
copy_table = copy.deepcopy(table)
for i in range(n):
for j in range(n):
if table[i][j] == 1:
shape = dfs(copy_table,i,j,[0,0],1,n)
if shape in blank:
blank.remove(shape)
ans += len(shape)
table = copy.deepcopy(copy_table)
else:
copy_table = copy.deepcopy(table)
return ans