BOJ 12100. 2048 (Easy)
๋ฌธ์
https://www.acmicpc.net/problem/12100
12100๋ฒ: 2048 (Easy)
์ฒซ์งธ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N (1 ≤ N ≤ 20)์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ๊ฒ์ํ์ ์ด๊ธฐ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ์ ๋ํ๋ด๋ฉฐ, ์ด์ธ์ ๊ฐ์ ๋ชจ๋ ๋ธ๋ก์ ๋ํ๋ธ๋ค. ๋ธ๋ก์ ์ฐ์ฌ ์๋ ์๋ 2
www.acmicpc.net
๐ธ ์ ๊ทผ ๋ฐฉ๋ฒ
5๋ฒ๋ฐ์ ์์์ง์ด๋ฏ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ํ์ํ๋ค. ๋ธ๋ฃจํธ ํฌ์ค! ์ํ!
์๋๋ก ์์ง์ด๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ ์๋ ๊ฒ๋ค ๋จผ์ ํฉ์ณ์ง๊ณ , ์ค๋ฅธ์ชฝ์ผ๋ก ์์ง์ด๋ฉด ์ค๋ฅธ์ชฝ์ ์๋ ๊ฒ๋ค ๋จผ์ ํฉ์ณ์ง๋ ๊ฒ์ ๊ตฌํํ์ง ์ํด์ move Range
๋ฅผ ๋ง๋ค์ด์ ๋ฒ์ ๊ฐ์ ์ง์ ํด์ฃผ์๋ค.
4 2 2 ์ธ ๊ฒ์ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ฐ์ด์ ํฉ์น๋ฉด 4 4 ๊ฒฐ๊ณผ๊ฐ ๋์์ผ ํ๋๋ฐ ์ด๋ฒ์ ํฉ์ณ์ง ๊ฒ๋ค์ ํ์ ์ํ๊ณ ๊ทธ๋ฅ ๊ฐ์ผ๋ฉด ํฉ์น๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ฉด 4 4 ์ธ ๊ฒฝ์ฐ์๋ ๊ฐ๋ค๊ณ ํ๋จํด์ 8์ด ๋์จ๋ค. ์ฒ์์๋ ์ด๊ฒ๋๋ฌธ์ ํ ์คํธ ์ผ์ด์ค์์ ์ฌ๋ฐ๋ฅธ ๋ต์ด ๋์ค์ง ์์์๋ค.
moved
๋ฅผ ์ฌ์ฉํด์ ์ด๋ฒ์ ํฉ์ณ์ง ๊ฒ๋ค์ ํ๋ฒ ๋ ์ํฉ์ณ์ง๋ ๊ฒ์ ์ฒดํฌํด์ฃผ๊ณ ๋๋ ๋ฌธ์ ๋ฅผ ํ ์ ์์๋ค.
# 12100 2048(Easy)
# 220926
import sys
input = sys.stdin.readline
# ์ ์ค๋ฅธ์ชฝ ์๋ ์ผ์ชฝ
di = [-1, 0, 1, 0]
dj = [0, 1, 0, -1]
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
answer = 0
moveRange = {
0 : [range(N), range(N)],
1 : [range(N), range(N-1, -1, -1)],
2 : [range(N-1, -1, -1), range(N)],
3 : [range(N), range(N)],
}
def move(arrMove, d):
moved = [[0]*N for _ in range(N)]
iRange, jRange = moveRange[d]
for i in iRange:
for j in jRange:
num = arrMove[i][j]
if num :
ni = i + di[d]
nj = j + dj[d]
pi, pj = i, j
while (0 <= ni < N) and (0<= nj < N):
# ๋น์นธ์ธ ๊ฒฝ์ฐ -> ์ด๋
if arrMove[ni][nj] == 0:
arrMove[pi][pj] = 0
arrMove[ni][nj] = num
pi, pj = ni, nj
ni = pi + di[d]
nj = pj + dj[d]
# ๊ฐ์ ์ซ์์ธ ๊ฒฝ์ฐ ๋ํ๊ธฐ
elif (arrMove[ni][nj] == num) and (moved[ni][nj] == 0):
arrMove[pi][pj] = 0
arrMove[ni][nj] = 2 * num
# ์ด๋ฒ์ ํฉ์น ๊ฑฐ ํ์
moved[ni][nj] = 1
break
# ๋ค๋ฅธ ์ซ์์ธ ๊ฒฝ์ฐ ์ด๋x
else:
break
return arrMove
def play(arrPlay, K):
global answer
if K == 0:
tmp = max([max(arrPlay[i]) for i in range(N)])
if tmp > answer:
answer = tmp
return
# ์์๋์ค๋ฅธ์ชฝ์ผ์ชฝ ์ด๋ ๊ฐ๋ฅ
for d in range(4):
# ๋ฅ์นดํผ
arrTmp = [arrPlay[i][:] for i in range(N)]
# ์ด๋ํ ๊ฒฐ๊ณผ ๋ฐฐ์ด ๋ฐํ
arrMoved = move(arrTmp, d)
play(arrMoved, K-1)
return
# ์ต๋ 5๋ฒ ์ด๋ ๊ฐ๋ฅ
play(arr, 5)
print(answer)
๐ Key Point
๐ธ ๋จผ์ ํฉ์ณ์ง๋ ๊ฒ์ ๋ํ ๋ฒ์ ์ค์ ์ ํด์ผํ๋ค.
๐ธ ํฉ์ณ์ง๋ ๊ณผ์ ์ด ํ์ค์ฉ ์ผ์ด๋๋๊น ํ์ค์ฉ ๋ด์ ํฉ์ณ์ง๋ ๊ฒ์ ํ๋จํ๊ฑฐ๋, ํฉ์น ๊ฒ๋ค์ ๋ฐ๋ก ํ์ํด์ ์ค๋ณตํด์ ํฉ์ณ์ง๋ ์ผ์ด ์๊ฒ ์ฃผ์ํด์ผ ํ๋ค.
'๐ถ Programming > ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
BOJ. 7662 ์ด์ค ์ฐ์ ์์ ํ (Python) (4) | 2022.12.08 |
---|---|
BOJ. 9095 1, 2, 3 ๋ํ๊ธฐ (Python) (2) | 2022.12.05 |
BOJ. 1725 ํ์คํ ๊ทธ๋จ (Python) (0) | 2022.10.03 |
2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ Lv2. ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (0) | 2022.09.11 |
2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ Lv1. ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2022.07.17 |