νμ΄
μ΄μ μ νμλ 2048 (Easy) λ¬Έμ μ νμ΄ λ°©λ²μμλ λͺ¨λ κ²½μ°μ μλ₯Ό νμνμ¬ λ΅μ λμΆνλ€λ©΄ 2048 (Hard)λ 10νμ μ΄λμΌλ‘ νμ₯λμκΈ° λλ¬Έμ μ μ ν κ°μ§μΉκΈ°λ₯Ό νμ¬ μκ°μ μ€μ¬ λ΅μ λμΆν΄μΌ ν©λλ€. κ·ΈλΌ, μ΄λ€ κ²½μ°λ₯Ό κ°μ§μΉκΈ°ν΄μ£Όμ΄μΌ ν κΉμ?
- λΈλ‘λ€μ μ΄λμμΌ°λλ° μ΄μ κ³Ό κ°μ λͺ¨μ΅μΌ κ²½μ°
λ¨μνκ² μκ°ν΄λ΄€μ λ κ°μ₯ λ¨Όμ λ μ€λ₯΄λ λ°©λ²μ λλ€.
μ΄λ€ ν κ²½μ°μ λνμ¬ μνμ’μ°λ₯Ό λͺ¨λ ꡬνκΈ° λλ¬Έμ μνμ’μ° μ€ κ°μ λͺ¨μμ κ°μ§ κ²½μ°κ° λ°μνλ©΄ μ μ΄μ νμν νμκ° μμ΅λλ€. μ€λ³΅λ κ²½μ°λ₯Ό νμνκΈ° λλ¬Έμ λλ€.
- ꡬν μ΅λκ°μ΄ μ΄μ μ ꡬν κ²λ³΄λ€ μμ κ²μ΄λΌλ κ² μμλλ κ²½μ°
μ΄ κ²½μ°λ μ λ λ°±μ€ μ§λ¬Έ κ²μμμ μ»μ΄λΈ ν΄λ΅μ λλ€.
μλ₯Ό λ€μ΄ μ²μμ μ΅λ 10ν μ΄λμ λν΄ νμνμλλ 512λΌλ μκ° μ΅λκ°μ΄ λμλ€κ³ ν©μλ€. κ·ΈλΌ 2048 κ²μ νΉμ±μ μν΄ 9ν μ΄λμλ μ μ΄λ μ΅λκ°μ΄ 256μ΄ λμμ κ²μ΄κ³ , 8ν μ΄λμλ 128, 7ν μ΄λμλ 64μ κ°μ΄ μ΄λ νμκ° 1ν κ°μν λλ§λ€ μ΅λκ°μ΄ μ μ΄λ μ λ°μ© μμμ‘μμ μμν μ μμ΅λλ€.
κ·Έλ¬λ©΄, μ΄λ€ κ²½μ°μ 10ν μ΅λκ°μ ꡬνλ©΄ 1νκΉμ§μ μμΈ‘λλ μ΅λκ°μ κΈ°λ‘ν μ μκ² λκ³ μ΄λ€ nν μ΄λμ κ²½μ°μμμ μ΅λκ°μ΄ μκΉ κ΅¬ν 1~10νκΉμ§μ μμΈ‘λλ μ΅λκ°μ nν μ΅λκ° λ³΄λ€ μλ€λ©΄ λ²λ¦΄ μ μκ² λ©λλ€.
μ½λλ‘ λ³΄μ΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
max_num = 0
# νμ¬ nν μ΄λμμμ μ΅λκ°μ ꡬνμ¬
for i in range(N):
max_num = max(max_num, max(board[i]))
# μ΄μ μ ꡬνλ nν μ΄λμ μ΅λκ°λ³΄λ€ μλ€λ©΄ νμ¬ κ²½μ°μ μλ μ΄λ»κ² μ΄λνλκ°μ
# μ΄μ μ ꡬν μ΅λκ°λ³΄λ€ μλ€.
if (max_num <= max_list[deep]): return
μλλλ‘λΌλ©΄ μ΄ λ κ²½μ°λ§ μ ꡬννλ©΄ μ±κ³΅μ λλ€.
κ·Όλ° μ κ°μ κ²½μ°λ μ΄μ μ νμλ '2048 (Easy)'μμ 보λλ₯Ό μμ§μ΄λ μκ³ λ¦¬μ¦μ μΌμ€ forλ¬ΈμΌλ‘ ꡬννμ¬μ μκΎΈ 10%μμ μκ° μ΄κ³Όκ° λ¬μμ΅λλ€. κ·Έλμ μ²μμ κ°μ§μΉκΈ°κ° λ¬Έμ μΈ μ€ μμλλ° μΌμ€ forλ¬Έμ΄ λ¬Έμ μκ³ μ΄μ€ forλ¬ΈμΌλ‘ ν΄κ²°νμμ΅λλ€.
μ μ²λΌ μΌμ€μ΄ μλλΌ μ΄μ€ forλ¬ΈμΌλ‘ λ§λμ ¨λ€λ©΄ μ μ΄μ λ¬Έμ μμ΄ λ κ² κ°μ΅λλ€!!
μ½λ
import sys
input = sys.stdin.readline
N = int(input())
board = [list(map(int, input().split())) for _ in range(N)]
mNum = 0
for i in range(N):
mNum = max(mNum, max(board[i]))
max_num = 0
max_list = [0 for _ in range(11)]
def board_move(wasd):
if (wasd == 0): # μ
for column in range(N):
top = 0
for row in range(1, N):
if board[row][column] != 0:
temp = board[row][column]
board[row][column] = 0
if board[top][column] == 0:
board[top][column] = temp
elif board[top][column] == temp:
board[top][column] <<= 1
top += 1
else:
top += 1
board[top][column] = temp
elif (wasd == 1): # μλ
for column in range(N):
top = N-1
for row in range(N-2, -1, -1):
if board[row][column] != 0:
temp = board[row][column]
board[row][column] = 0
if board[top][column] == 0:
board[top][column] = temp
elif board[top][column] == temp:
board[top][column] <<= 1
top -= 1
else:
top -= 1
board[top][column] = temp
elif (wasd == 2): # μΌμͺ½
for row in range(N):
top = 0
for column in range(1, N):
if board[row][column] != 0:
temp = board[row][column]
board[row][column] = 0
if board[row][top] == 0:
board[row][top] = temp
elif board[row][top] == temp:
board[row][top] <<= 1
top += 1
else:
top += 1
board[row][top] = temp
elif (wasd == 3):
for row in range(N):
top = N-1
for column in range(N-2, -1, -1):
if board[row][column] != 0:
temp = board[row][column]
board[row][column] = 0
if board[row][top] == 0:
board[row][top] = temp
elif board[row][top] == temp:
board[row][top] <<= 1
top -= 1
else:
top -= 1
board[row][top] = temp
def n_2048(deep):
global mNum, board, max_num
max_num = 0
for i in range(N):
max_num = max(max_num, max(board[i]))
if (max_num <= max_list[deep]): return
if (deep == 10):
mNum = max(mNum, max_num)
max_num = mNum
if (max_list[10] < max_num):
for i in range(10, 0, -1):
max_list[i] = max_num
max_num //= 2
return
bd = [b[:] for b in board]
for i in range(4):
board_move(i)
if (bd == board):
continue
n_2048(deep + 1)
board = [b[:] for b in bd]
n_2048(0)
print(mNum)'μκ³ λ¦¬μ¦ λ¬Έμ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| 17406 - λ°°μ΄ λ리기 4 [μ±κ³΅(λ°λ‘ννΈ)|01:06:16] (2) | 2024.08.17 |
|---|---|
| 3190 - λ± [μ±κ³΅(λ°λ‘ννΈ)|02:14:43] (0) | 2024.08.09 |
| λ°±μ€ 12100 - 2048 (Easy) [νμ΄μ¬] (2) | 2022.11.20 |
| λ°±μ€ 1541 - μμ΄λ²λ¦° μνΈ [μλ°] (1) | 2022.10.31 |
| λ°±μ€ 10026 | μ λ‘μμ½ [νμ΄μ¬] (1) | 2022.08.09 |