문제 링크: https://www.acmicpc.net/problem/12100
백준 알고리즘 중급 1/3 541에서 4번째 - 12100번 2048 (Easy)를 풀어보았다.
풀이: https://hongcoding.tistory.com/126
C++
Python
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)
Java
'코테용 문제풀이 > 백준' 카테고리의 다른 글
데스 나이트 풀이 (0) | 2023.02.22 |
---|---|
뱀과 사다리 게임 풀이 (0) | 2023.02.22 |
구슬 탈출 2 풀이 (0) | 2023.02.22 |
가르침 풀이 (0) | 2023.02.22 |
알파벳 풀이 (0) | 2023.02.22 |