[12100번] 2048(Easy)

박형진·2023년 4월 10일
0

https://www.acmicpc.net/problem/12100


1. 코드

# [TC] https://www.acmicpc.net/board/view/61812
import copy


def down():
    # move
    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
    # [2]=>[0]
    # [2]  [4]
    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
    # [2]=>[4]
    # [2]  [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
    # [2][2] => [0][4]
    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
    # [2][2] => [4][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)
profile
안녕하세요!

0개의 댓글