[백준 삼성기출 X] 2048(Easy)(python)

이진규·2022년 9월 29일
1

백준(PYTHON)

목록 보기
91/115

문제

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

나의 코드

"""

"""

from copy import deepcopy
from sys import stdin
input = stdin.readline

n = int(input())
pan = [ list(map(int, input().split())) for _ in range(n) ]
answer = 0

def up(pan):
    for x in range(n):
        p = 0

        for y in range(1, n):
            if pan[y][x]:
                tmp = pan[y][x]
                pan[y][x] = 0

                if pan[p][x] == 0:
                    pan[p][x] = tmp
                elif pan[p][x] == tmp:
                    pan[p][x] *= 2
                    p += 1
                else:
                    p += 1
                    pan[p][x] = tmp

    return pan

def down(pan):
    for x in range(n):
        p = n-1

        for y in range(n-2, -1, -1):
            if pan[y][x]:
                tmp = pan[y][x]
                pan[y][x] = 0

                if pan[p][x] == 0:
                    pan[p][x] = tmp
                elif pan[p][x] == tmp:
                    pan[p][x] *= 2
                    p -= 1
                else:
                    p -= 1
                    pan[p][x] = tmp
    return pan

def left(pan):
    for x in range(n):
        p = 0

        for y in range(1, n):
            if pan[x][y]:
                tmp = pan[x][y]
                pan[x][y] = 0

                if pan[x][p] == 0:
                    pan[x][p] = tmp
                elif pan[x][p] == tmp:
                    pan[x][p] *= 2
                    p += 1
                else:
                    p += 1
                    pan[x][p] = tmp

    return pan

def right(pan):
    for x in range(n):
        p = n-1

        for y in range(n-2, -1, -1):
            if pan[x][y]:
                tmp = pan[x][y]
                pan[x][y] = 0

                if pan[x][p] == 0:
                    pan[x][p] = tmp
                elif pan[x][p] == tmp:
                    pan[x][p] *= 2
                    p -= 1
                else:
                    p -= 1
                    pan[x][p] = tmp
    return pan

def dfs(pan, depth):
    global answer

    if depth == 5:
        for i in range(n):
            for j in range(n):
                answer = max(pan[i][j], answer)
        return

    dfs(up(deepcopy(pan)), depth+1)
    dfs(down(deepcopy(pan)), depth + 1)
    dfs(left(deepcopy(pan)), depth + 1)
    dfs(right(deepcopy(pan)), depth + 1)

dfs(pan, 0)
print(answer)

    

설명

너무 어려워서 참고 자료 많이 참고..

참고 자료

https://velog.io/@ms269/%EB%B0%B1%EC%A4%80-12100-2048-Easy-%ED%8C%8C%EC%9D%B4%EC%8D%AC-Python
https://cijbest.tistory.com/86

profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글