https://www.acmicpc.net/problem/12100
1. 코드
import copy
def down():
for _ in range(m):
for i in range(m - 1):
for j in range(n):
if graph[i + 1][j] == 0:
graph[i + 1][j], graph[i][j] = graph[i][j], 0
for j in range(n):
for i in range(m - 1, 0, -1):
if graph[i][j] == graph[i - 1][j] != 0:
graph[i][j] *= 2
graph[i - 1][j] = 0
for _ in range(m):
for i in range(m - 1):
for j in range(n):
if graph[i + 1][j] == 0:
graph[i + 1][j], graph[i][j] = graph[i][j], 0
def up():
for _ in range(m):
for i in range(m - 1, 0, -1):
for j in range(n):
if graph[i - 1][j] == 0:
graph[i - 1][j], graph[i][j] = graph[i][j], 0
for j in range(n):
for i in range(m - 1):
if graph[i][j] == graph[i + 1][j] != 0:
graph[i][j] *= 2
graph[i + 1][j] = 0
for _ in range(m):
for i in range(m - 1, 0, -1):
for j in range(n):
if graph[i - 1][j] == 0:
graph[i - 1][j], graph[i][j] = graph[i][j], 0
def right():
for _ in range(n):
for j in range(n - 1):
for i in range(m):
if graph[i][j + 1] == 0:
graph[i][j + 1], graph[i][j] = graph[i][j], 0
for i in range(m):
for j in range(n - 1, 0, -1):
if graph[i][j] == graph[i][j - 1] != 0:
graph[i][j] *= 2
graph[i][j - 1] = 0
for _ in range(n):
for j in range(n - 1):
for i in range(m):
if graph[i][j + 1] == 0:
graph[i][j + 1], graph[i][j] = graph[i][j], 0
def left():
for _ in range(n):
for j in range(n - 1, 0, -1):
for i in range(m):
if graph[i][j - 1] == 0:
graph[i][j - 1], graph[i][j] = graph[i][j], 0
for i in range(m):
for j in range(n - 1):
if graph[i][j] == graph[i][j + 1] != 0:
graph[i][j] *= 2
graph[i][j + 1] = 0
for _ in range(n):
for j in range(n - 1, 0, -1):
for i in range(m):
if graph[i][j - 1] == 0:
graph[i][j - 1], graph[i][j] = graph[i][j], 0
def dfs(idx, path):
if idx == 5:
cases.append(path[:])
return
dfs(idx + 1, path + ['d'])
dfs(idx + 1, path + ['u'])
dfs(idx + 1, path + ['l'])
dfs(idx + 1, path + ['r'])
ans = -1
n = int(input())
m = n
og_graph = [list(map(int, input().split())) for _ in range(n)]
cases = []
dfs(0, [])
for case in cases:
graph = copy.deepcopy(og_graph)
for char in case:
if char == 'u':
up()
elif char == 'd':
down()
elif char == 'l':
left()
elif char == 'r':
right()
for i in range(n):
for j in range(n):
ans = max(ans, graph[i][j])
print(ans)