ํ์ด
๋ชจ๋ ๊ฒฝ์ฐ์ ์์ ๋ํด์ ๊ฒ์ฌ๋ฅผ ํด๋ด์ผ ์ด๋ค ๊ฒฝ์ฐ์ ๊ฐ์ฅ ํฐ ์๊ฐ ๋ง๋ค์ด์ง๋์ง ์ ์ ์๋ ๋ฌธ์ ์ ๋๋ค.
๊ทธ๋์, ํ์ด ๋ฐฉ๋ฒ์ ‘๋ฐฑํธ๋ํน’์ ์ด์ฉํ์ฌ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ ๋๋ค.
๋ฐฑํธ๋ํน ์์ฒด์ ๊ตฌํ์ ์ด๋ ต์ง ์์ง๋ง ๊ฐ ์๋ค์ move ํ๋ ๊ฒ์ ์๊ฐ์ด ์ข ๊ฑธ๋ ธ๋ ๋ฌธ์ ์์ต๋๋ค.
์, ์๋ ์ด๋์ row๋ฅผ ์ด๋ํ๋ฉด์ ๊ฐฑ์ ํด์ผํ๊ณ
์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์ด๋์ column์ ์ด๋ํ๋ฉด์ ๊ฐฑ์ ํด์ผํฉ๋๋ค.
๊ฐ ์นธ์ ๋ํ์ฌ ์ ํ๋ ์นธ ๋ค์ ๋จ์์๋ ์นธ์ ์์๋๋ก ๊ฒ์ฌํ๋ฉด์ ๋จ์์๋ ์นธ์ด 0์ด๋ฉด ๋์ด๊ฐ๊ณ , 0์ด ์๋๋ฉด ์ ํ๋ ์นธ(0์ด ์๋๋ฉด)๊ณผ ํฉ์น๊ฑฐ๋ ํน์ ์ ํ๋ ์นธ(0์ด๋ฉด)์ ๊ทธ ์นธ์ ๊ฐ์ ์ด๋์์ผฐ์ต๋๋ค.
์ ํ๋ ์นธ๊ณผ ๋จ์์๋ ์นธ์ด ํฉ์ณ์ก๋ค๋ฉด ๋ค์ ์นธ์ผ๋ก ๋์ด๊ฐ์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋์ง๋ง, ๋ง์ฝ ์ ํ๋ ์นธ์ด 0์ด๋ฉด ๋จ์์๋ ์นธ ๋ค์ ๋ ๊ฐ์ ๊ฐ์ ๊ฐ์ง ์นธ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ถ์ง ์๊ณ ๊ฒ์ฌํด์ฃผ์ด์ผ ํฉ๋๋ค.
๋์ถฉ ํ๋ก ๋ณด์ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ ํ๋ ์นธ์ด 0 ์ธ ๊ฒฝ์ฐ
| 0 | 2 | 2 |
์ ํ๋ ์นธ์ด 0์ด๊ธฐ ๋๋ฌธ์ ๋ค์ ๋จ์์๋ ์นธ 2๊ฐ 0์ผ๋ก ์ด๋ํฉ๋๋ค.
| 2 | 0 | 2 |
๊ทธ ํ, ์ด๋ํ์๋คํด๋ ๋ค์ ์๋ ์นธ์ ์ํด ํฉ์ณ์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ์ถ์ง ์๊ณ ๋ค์ ์นธ์ ๊ฒ์ฌํฉ๋๋ค.
์ด๋, ๊ฐ์ ๊ฐ์ด๊ธฐ ๋๋ฌธ์ ๋นจ๊ฐ์ ์นธ์ ํ๋์ ๊ฐ์ ํฉ์ณ์ค๋๋ค.
| 4 | 0 | 0 |
๊ฐ ์นธ๋ง๋ค ํฉ์น๋ ํ์๋ 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)
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 3190 - ๋ฑ [์ฑ๊ณต(๋ฐ๋กํํธ)|02:14:43] (0) | 2024.08.09 |
|---|---|
| ๋ฐฑ์ค 12094 - 2048 (Hard) [ํ์ด์ฌ] (0) | 2022.11.22 |
| ๋ฐฑ์ค 1541 - ์์ด๋ฒ๋ฆฐ ์ํธ [์๋ฐ] (1) | 2022.10.31 |
| ๋ฐฑ์ค 10026 | ์ ๋ก์์ฝ [ํ์ด์ฌ] (1) | 2022.08.09 |
| ๋ฐฑ์ค 2206 | ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ [ํ์ด์ฌ] (1) | 2022.08.09 |