1. ๊ฒ์ํ์ ์ํ์ข์ฐ๋ก ๊ธฐ์ธ์ด๊ธฐ
2. ์ต๋ 5๋ฒ ์์ง์ฌ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ๋ธ๋ก์ ์ป๋ ๊ฒ์ด๋ฏ๋ก 5๋ฒ ๊ธฐ์ธ์ด๋ ๋ฐฉํฅ ์ ํ๊ธฐ
์ผ๋จ, 1๋ฒ ๊ณผ์ ์์ ๋จผ์ ์ผ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๋ ํจ์๋ฅผ ์์ฑํ์๋ค.
์ด๋, ๊ฐ์ฅ ์ค์ํ ํคํฌ์ธํธ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด์ ์๋ ๊ฒ์ํ์ ์์์ ๋น๊ตํ๋ฉฐ ํ๋์ฉ ์๊ฐํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ๊ทธ ๋ค์ ์ค๋ฅธ์ชฝ, ์์ชฝ, ์๋์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๋ ํจ์๋ฅผ ๋ค ๋ง๋ค๋ฉด ๋๋๋ฐ, ์ด๋ ์๊ฐํด๋ณด๋ฉด, ๊ฒ์ํ ์์ฒด๋ฅผ ํ์ ํ๋ฉด ์ผ์ชฝ์ผ๋ก ๊ธฐ์ธ์ด๋ ํจ์ ํ๋๋ง์ผ๋ก ๋ชจ๋๋ฅผ ๊ตฌํํ ์ ์๋ค.
์ด๋, ํ์ด์ฌ์์๋ zip ํจ์๋ฅผ ํ์ฉํ ์ ์๋ค.
1๋ฒ : [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
2๋ฒ : [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
-> 1๋ฒ ๋ฐฐ์ด์ ๋ง์ง๋ง ๋ฆฌ์คํธ์ 0๋ฒ์งธ ์์๋ถํฐ ๊ฐ์ฅ ์ฒซ๋ฒ์งธ ๋ฆฌ์คํธ์ 0๋ฒ์งธ ์์๊น์ง 2๋ฒ ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ๋ฆฌ์คํธ์ ๋ค์ด๊ฐ๋ค. ๋๋จธ์ง๋ ๋์ผํ๋ค.
90๋๋ก ํ์ ์ ํด์ผํ ๋ zip์ ์ด์ฉํด๋ณด์.
turn90 = list(map(list, zip(*board[::-1])))
๋จผ์ , [[7, 8, 9], [4, 5, 6], [1, 2, 3]] ์ญ์์ผ๋ก ์ ๋ ฌํ๊ณ , ๊ฐ์ ์ธ๋ฑ์ค์ ์์๋ค๋ผ๋ฆฌ ๋ฌถ๋๋ค. ๊ทธ๋ผ 2๋ฒ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ๋์จ๋ค.
๊ทธ ๋ค์, 5๋ฒ ๊ธฐ์ธ์ด๋ ๋ฐฉํฅ์ ์ ํ๋ฉด ๋๋๋ฐ, ์ํ์ข์ฐ๋ก ๊ธฐ์ธ์์ ๋๋ฅผ ๋ค ์๋ฎฌ๋ ์ด์
ํด๋ณด๊ณ , ๊ทธ ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ด ๋์ค๋ ๋ฐฉํฅ์ผ๋ก max ๊ฐ์ ๊ตฌํด์ค๋ค.
๋ต์ ๋ด๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ ธ๋ค. ๊ตฌํ์ ์ด๋ ต๋ค!
import sys
from copy import deepcopy
def rotate(board, dir):
turn90 = list(map(list, zip(*board[::-1])))
turn180 = list(map(list, zip(*turn90[::-1])))
turn270 = list(map(list, zip(*turn180[::-1])))
if dir == 0:
return board
elif dir == 1:
return turn90
elif dir == 2:
return turn180
else:
return turn270
def tilt (board, dir):
rotate_board = rotate(board, dir)
for i in range(n):
new_arr = [0 for _ in range(n)]
idx = 0
for j in range(n):
# ์ฃผ์ด์ง ๋ฐฐ์ด์ ์์๊ฐ ์์ผ๋ฉด ๋ค์ ๋ด์ฉ์ ์คํํ์ง ์๋๋ค.
if rotate_board[i][j] == 0:
continue
# ์๋ก์ด ๋ฐฐ์ด idx์ ์์๊ฐ ์์ผ๋ฉด, ํด๋นํ๋ ๋ฐฐ์ด ๊ฐ์ ๋ฃ๋๋ค.
if new_arr[idx] == 0:
new_arr[idx] = rotate_board[i][j]
# ์๋ก์ด ๋ฐฐ์ด idx์ ์์๊ฐ ์๋๋ฐ, ํด๋นํ๋ ๋ฐฐ์ด๊ฐ๊ณผ ๊ฐ์ผ๋ฉด ๋๋ฐฐ๋ฅผ ๊ณฑํ๋ค.
elif new_arr[idx] == rotate_board[i][j]:
new_arr[idx] *= 2
idx += 1
# ์๋ก์ด ๋ฐฐ์ด idx์ ์์๊ฐ ์๋๋ฐ, ํด๋นํ๋ ๋ฐฐ์ด๊ฐ๊ณผ ๋ค๋ฅด๋ฉด, ๊ทธ ๋ค์ idx์ ํด๋นํ๋ ๋ฐฐ์ด๊ฐ์ ๋ฃ๋๋ค.
else:
idx += 1
new_arr[idx] = rotate_board[i][j]
for j in range(n):
rotate_board[i][j] = new_arr[j]
return rotate_board
def select_dir(board, cnt):
# 5๋ฒ ์ด๋์์ผ์ ์ป์ ์ ์๋ ๊ฐ์ฅ ํฐ ๋ธ๋ก์ ๊ตฌํ๊ธฐ ์ํ ๋ณ์
global ans
if cnt == 5:
for i in range(n):
for j in range(n):
ans = max(ans, board[i][j])
return
for i in range(4):
tmp_board = tilt(deepcopy(board), i)
select_dir(tmp_board, cnt + 1)
n = int(sys.stdin.readline())
board = []
for _ in range(n):
board.append(list(map(int, sys.stdin.readline().split())))
ans = 0
select_dir(board, 0)
print(ans)