https://www.acmicpc.net/problem/12100
12100번: 2048 (Easy)
첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2
www.acmicpc.net
from copy import deepcopy
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int, input().split())))
def move(board, dir):
if dir == 0: # 동쪽
for i in range(n):
top = n - 1
for j in range(n - 2, -1, -1):
if board[i][j]:
tmp = board[i][j]
board[i][j] = 0
if board[i][top] == 0:
board[i][top] = tmp
elif board[i][top] == tmp:
board[i][top] = tmp * 2
top -= 1
else:
top -= 1
board[i][top] = tmp
elif dir == 1: # 서쪽
for i in range(n):
top = 0
for j in range(1, n):
if board[i][j]:
tmp = board[i][j]
board[i][j] = 0
if board[i][top] == 0:
board[i][top] = tmp
elif board[i][top] == tmp:
board[i][top] = tmp * 2
top += 1
else:
top += 1
board[i][top] = tmp
elif dir == 2: # 남쪽
for j in range(n):
top = n - 1
for i in range(n - 2, -1, -1):
if board[i][j]:
tmp = board[i][j]
board[i][j] = 0
if board[top][j] == 0:
board[top][j] = tmp
elif board[top][j] == tmp:
board[top][j] = tmp * 2
top -= 1
else:
top -= 1
board[top][j] = tmp
else:
for j in range(n):
top = 0
for i in range(1, n):
if board[i][j]:
tmp = board[i][j]
board[i][j] = 0
if board[top][j] == 0:
board[top][j] = tmp
elif board[top][j] == tmp:
board[top][j] = tmp * 2
top += 1
else:
top += 1
board[top][j] = tmp
return board
def dfs(board, cnt):
global ans
if cnt == 5:
for i in range(n):
for j in range(n):
ans = max(ans, board[i][j])
return
for i in range(4):
tmp_board = move(deepcopy(board), i)
dfs(tmp_board, cnt + 1)
ans = 0
dfs(graph, 0)
print(ans)
'Coding > 백준 온라인 저지 (Baekjoon Online Judge)' 카테고리의 다른 글
백준 온라인 저지(Baekjoon Online Judge) - 18870 : 좌표 압축 (0) | 2023.04.12 |
---|---|
백준 온라인 저지(Baekjoon Online Judge) - 10814 : 나이순 정렬 (0) | 2023.04.12 |
백준 온라인 저지(Baekjoon Online Judge) - 10798 : 세로읽기 (0) | 2023.04.12 |
백준 온라인 저지(Baekjoon Online Judge) - 25206 : 너의 평점은 (0) | 2023.04.12 |
백준 온라인 저지(Baekjoon Online Judge) - 10988 : 팰린드롬인지 확인하기 (0) | 2023.04.12 |