๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ

๋ฐฑ์ค€ 12100 - 2048 (Easy) [ํŒŒ์ด์ฌ]

ํ’€์ด

๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๊ฒ€์‚ฌ๋ฅผ ํ•ด๋ด์•ผ ์–ด๋–ค ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ํฐ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ, ํ’€์ด ๋ฐฉ๋ฒ•์€ ‘๋ฐฑํŠธ๋ž˜ํ‚น’์„ ์ด์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋ฐฑํŠธ๋ž˜ํ‚น ์ž์ฒด์˜ ๊ตฌํ˜„์€ ์–ด๋ ต์ง€ ์•Š์ง€๋งŒ ๊ฐ ์ˆ˜๋“ค์„ move ํ•˜๋Š” ๊ฒƒ์— ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋˜ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

์œ„, ์•„๋ž˜ ์ด๋™์€ row๋ฅผ ์ด๋™ํ•˜๋ฉด์„œ ๊ฐฑ์‹ ํ•ด์•ผํ•˜๊ณ 

์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ด๋™์€ column์„ ์ด๋™ํ•˜๋ฉด์„œ ๊ฐฑ์‹ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ ์นธ์— ๋Œ€ํ•˜์—ฌ ์„ ํƒ๋œ ์นธ ๋’ค์— ๋‚จ์•„์žˆ๋Š” ์นธ์„ ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์‚ฌํ•˜๋ฉด์„œ ๋‚จ์•„์žˆ๋Š” ์นธ์ด 0์ด๋ฉด ๋„˜์–ด๊ฐ€๊ณ , 0์ด ์•„๋‹ˆ๋ฉด ์„ ํƒ๋œ ์นธ(0์ด ์•„๋‹ˆ๋ฉด)๊ณผ ํ•ฉ์น˜๊ฑฐ๋‚˜ ํ˜น์€ ์„ ํƒ๋œ ์นธ(0์ด๋ฉด)์— ๊ทธ ์นธ์˜ ๊ฐ’์„ ์ด๋™์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

 

์„ ํƒ๋œ ์นธ๊ณผ ๋‚จ์•„์žˆ๋Š” ์นธ์ด ํ•ฉ์ณ์กŒ๋‹ค๋ฉด ๋‹ค์Œ ์นธ์œผ๋กœ ๋„˜์–ด๊ฐ€์„œ ๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๋˜์ง€๋งŒ, ๋งŒ์•ฝ ์„ ํƒ๋œ ์นธ์ด 0์ด๋ฉด ๋‚จ์•„์žˆ๋Š” ์นธ ๋’ค์— ๋˜ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ์นธ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๊ฒ€์‚ฌํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋Œ€์ถฉ ํ‘œ๋กœ ๋ณด์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

  1. ์„ ํƒ๋œ ์นธ์ด 0 ์ธ ๊ฒฝ์šฐ
0 2 2

์„ ํƒ๋œ ์นธ์ด 0์ด๊ธฐ ๋•Œ๋ฌธ์— ๋’ค์— ๋‚จ์•„์žˆ๋Š” ์นธ 2๊ฐ€ 0์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

2 0 2

๊ทธ ํ›„, ์ด๋™ํ•˜์˜€๋‹คํ•ด๋„ ๋’ค์— ์žˆ๋Š” ์นธ์— ์˜ํ•ด ํ•ฉ์ณ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋‹ค์Œ ์นธ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋•Œ, ๊ฐ™์€ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋นจ๊ฐ„์ƒ‰ ์นธ์— ํŒŒ๋ž€์ƒ‰ ๊ฐ’์„ ํ•ฉ์ณ์ค๋‹ˆ๋‹ค.

4 0 0

๊ฐ ์นธ๋งˆ๋‹ค ํ•ฉ์น˜๋Š” ํšŸ์ˆ˜๋Š” 1๋ฒˆ๋ฐ–์— ์•ˆ์ฃผ์–ด์ง€๋ฏ€๋กœ ๋‹ค์Œ ์นธ์„ ์„ ํƒํ•˜์—ฌ ๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

  1. ์„ ํƒ๋œ ์นธ์ด ์ˆซ์ž์ธ ๊ฒฝ์šฐ
2 2 4

์„ ํƒ๋œ ์นธ๊ณผ ๋’ค์— ๋‚จ์•„์žˆ๋Š” ์นธ์ด ๊ฐ™์€ ๊ฐ’์ด๋ผ ํ•ฉ์นฉ๋‹ˆ๋‹ค.

4 0 4

์ด๋ฏธ ์„ ํƒ๋œ ๊ฐ’์ด ํ•ฉ์ณ์กŒ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ํ•ฉ์ณ์ง€์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ์นธ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„, 1๋ฒˆ ๊ณผ์ •์— ๋”ฐ๋ผ ํŒŒ๋ž€์ƒ‰ ๊ฐ’์ธ 4๊ฐ€ 0์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๋๋‚ฉ๋‹ˆ๋‹ค.

4 4 0

ํ•œ ๋งˆ๋””๋กœ ๊ทธ๋ƒฅ ๊ฐ ์นธ์„ ๊ฐฑ์‹ ํ•˜๋ฉด์„œ ์ด๋™ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ฆผ๋ณด๋‹ค ์ฝ”๋“œ๊ฐ€ ๋” ์ž˜ ์ดํ•ด๋  ๊ฑฐ ๊ฐ™๋„ค์šฉ.

์ฝ”๋“œ๋กœ ๋ณด์ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค…

 

์ฝ”๋“œ

import sys
input = sys.stdin.readline

N = int(input())
board = [list(map(int, input().split())) for _ in range(N)]
mNum = 0

def board_move(wasd):
    if (wasd == 0): # ์œ„
        for column in range(N):
            for row in range(N-1):
                for new_row in range(row+1, N):
                    if (board[row][column] != 0 and board[new_row][column] != 0):
                        if (board[row][column] == board[new_row][column]):
                            board[row][column] += board[new_row][column]
                            board[new_row][column] = 0
                            break
                        else:
                            break
                    elif (board[row][column] == 0 and board[new_row][column] != 0):
                        board[row][column] = board[new_row][column]
                        board[new_row][column] = 0
    elif (wasd == 1): # ์•„๋ž˜
        for column in range(N):
            for row in range(N-1, 0, -1):
                for new_row in range(row-1, -1, -1):
                    if (board[row][column] != 0 and board[new_row][column] != 0):
                        if (board[row][column] == board[new_row][column]):
                            board[row][column] += board[new_row][column]
                            board[new_row][column] = 0
                            break
                        else:
                            break
                    elif (board[row][column] == 0 and board[new_row][column] != 0):
                        board[row][column] = board[new_row][column]
                        board[new_row][column] = 0
    elif (wasd == 2): # ์™ผ์ชฝ
        for row in range(N):
            for column in range(N-1):
                for new_column in range(column+1, N):
                    if (board[row][column] != 0 and board[row][new_column] != 0):
                        if (board[row][column] == board[row][new_column]):
                            board[row][column] += board[row][new_column]
                            board[row][new_column] = 0
                            break
                        else:
                            break
                    elif (board[row][column] == 0 and board[row][new_column] != 0):
                        board[row][column] = board[row][new_column]
                        board[row][new_column] = 0
    elif (wasd == 3):
        for row in range(N):
            for column in range(N-1, 0, -1):
                for new_column in range(column-1, -1, -1):
                    if (board[row][column] != 0 and board[row][new_column] != 0):
                        if (board[row][column] == board[row][new_column]):
                            board[row][column] += board[row][new_column]
                            board[row][new_column] = 0
                            break
                        else:
                            break
                    elif (board[row][column] == 0 and board[row][new_column] != 0):
                        board[row][column] = board[row][new_column]
                        board[row][new_column] = 0

def n_2048(deep):
    global mNum, board
    if (deep == 5):
        for i in range(N):
            mNum = max(mNum, max(board[i]))
        return
    
    bd = [b[:] for b in board]
    for i in range(4):
        board_move(i)
        n_2048(deep + 1)
        board = [b[:] for b in bd]

n_2048(0)
print(mNum)