<λ¬Έμ λ§ν¬>
https://www.acmicpc.net/problem/12100
12100λ²: 2048 (Easy)
첫째 μ€μ 보λμ ν¬κΈ° N (1 ≤ N ≤ 20)μ΄ μ£Όμ΄μ§λ€. λμ§Έ μ€λΆν° Nκ°μ μ€μλ κ²μνμ μ΄κΈ° μνκ° μ£Όμ΄μ§λ€. 0μ λΉ μΉΈμ λνλ΄λ©°, μ΄μΈμ κ°μ λͺ¨λ λΈλ‘μ λνλΈλ€. λΈλ‘μ μ°μ¬ μλ μλ 2
www.acmicpc.net
<νμ΄ μ λ΅>
1. Nμ΄ 20 μ΄νμ΄κ³ μνμ΄ 5λ²μΌλ‘ κ³ μ λμ΄ μμ΄μ λ°±νΈλνΉμ μ΄μ©ν μμ νμμΌλ‘ λ¬Έμ λ₯Ό ν μ μλ€.
2. λΈλμ λ³ν© / μ΄λ 2κ°μ§λ₯Ό μνμ’μ° 4λ°©ν₯μΌλ‘ ꡬνν΄μΌλλλ° λλ ν λ°©ν₯μ λν΄μλ§ κ΅¬ννκ³ λλ¨Έμ§λ λ°°μ΄μ νμ μμΌμ μ μ©νλ λ²μ μ΄μ©νλ€. (μ°Έκ³ : https://bluuubery.tistory.com/48?category=584396)
3. μ’ -> μ° ν λ°©ν₯μ λν΄μλ§ μ΄λκ³Ό λ³ν©μ ꡬννλλ° ν λ¨μλ‘ μ½λλ₯Ό μ§ λλΆμ μ¬λΌμ΄μ± λ±μ μ΄μ©ν μ μμ΄μ ν° μ΄λ €μμ μμλ€.
4. μ£Όμν μ μ λΈλμ ν©μΉλ κ³Όμ μμ μ§μ /μ§ν μμλλ§ λΉκ΅λ₯Ό νλ©΄ 2 0 0 2 -> 0 0 0 4 κ°μ κ²½μ°λ₯Ό μ λλ‘ νμΈμ λͺ»νλ―λ‘ μ΄λμ λ¨Όμ νκ³ ν©μ³μ€μΌ νλ€.
<μ λ΅ μ½λ>
import sys, os, io, atexit
input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))
# 221008 12100 2048(Easy)
# μ λ΅μ½λ
# rotate: λ°°μ΄ νμ μν€λ ν¨μ
def rotate(d):
global arr
# μκ³λ°©ν₯ 0λ
if d == 0:
return
# μκ³λ°©ν₯ 90λ
elif d == 1:
arr = list(map(list, zip(*arr[::-1])))
return
# μκ³λ°©ν₯ 180λ
elif d == 2:
arr = [[arr[N - r - 1][N - c - 1] for c in range(N)] for r in range(N)]
return
# μκ³λ°©ν₯ 270λ
else:
arr = list(map(list, zip(*arr)))[::-1]
return
# merge: λΈλλ€μ ν©μΉλ ν¨μ (ν λ¨μ)
def merge():
for row in arr:
for i in range(N - 1, 0, -1):
# μ§μ λΈλκ³Ό κ°μ μ«μμΌ κ²½μ°
if row[i] == row[i - 1]:
# ν΄λΉ λΈλ *2, μ§μ λΈλ 0
row[i] *= 2
row[i - 1] = 0
# move: λΈλλ€μ ν λ°©ν₯μΌλ‘ λ°μ΄μ£Όλ ν¨μ (ν λ¨μ)
def move():
for i in range(N):
# new_row: ν λ°©ν₯μΌλ‘ λ°λ¦° μλ‘μ΄ ν
new_row = []
# 0μ΄ μλλ©΄ new_rowμ λ΄μμ€λ€.
for j in range(N):
if arr[i][j]:
new_row.append(arr[i][j])
# new_rowμμ 0μ λΆμ΄κ³ μλ νμ΄λ λ°κΏμ€λ€.
arr[i] = [0] * (N - len(new_row)) + new_row
# λ°±νΈλνΉ ν¨μ
def back_tracking(depth):
global ans, arr
# 5λ² λ€ μ΄λνμ λ μ΅λκ° κ°±μ ν λ°ν
if depth == 5:
ans = max(ans, max(map(max, arr)))
return
# μνμ’μ° 4λ°©ν₯μΌλ‘ λΈλ μ΄λ
for d in range(4):
# arr_copy: λ°±νΈλνΉ μ μμν 볡μμ μν 볡μ¬λ³Έ
arr_copy = [arr[i][:] for i in range(N)]
# μ£Όμ΄μ§ λ°©ν₯μΌλ‘ λ°°μ΄ νμ
rotate(d)
# μ΄λ(ν©μΉκΈ° μν μ μ²λ¦¬) - ν©μΉκΈ° - μ΄λ
move()
merge()
move()
# λ€μ μνμΌλ‘ λμ΄κ°λ€.
back_tracking(depth + 1)
# λ°°μ΄ μν 볡μ
arr = arr_copy
# N: λ°°μ΄μ ν¬κΈ°, arr: λ°°μ΄ μ΄κΈ° μν
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
# ans: λΈλμ μ΅λκ°
ans = 0
# λ°±νΈλνΉ μν
back_tracking(0)
# μ λ΅ μΆλ ₯
print(ans)
'β Problem_Solving > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€] 17471 κ²λ¦¬λ§¨λλ§ (Python/νμ΄μ¬) (0) | 2022.10.14 |
---|---|
[λ°±μ€] 16236 μκΈ°μμ΄ (Python/νμ΄μ¬) (0) | 2022.10.13 |
[λ°±μ€] 18405 κ²½μμ μ μΌ (Python/νμ΄μ¬) (0) | 2022.10.10 |
[λ°±μ€] 17142 μ°κ΅¬μ 3 (Python/νμ΄μ¬) (1) | 2022.10.07 |
[λ°±μ€] 1766 λ¬Έμ μ§ (Python/νμ΄μ¬) (0) | 2022.10.06 |
λκΈ