Baekjoon-15898-피아의 아틀리에
07 Oct 2022Python으로 풀 수 없는 문제!!
import sys
input = sys.stdin.readline
from itertools import permutations, product
def rot(arr):
# rotate 90 degree CCW
new_arr = []
for i in range(4):
line = []
for j in range(4):
line.append(arr[j][3-i])
new_arr.append(line)
return new_arr
n = int(input())
put_dict = {k:[] for k in range(n)} # values, colors
for i in range(n):
vals,colors = [],[]
for _ in range(4):
line = list(map(int,input().split()))
vals.append(line)
for _ in range(4):
line = list(input().split())
colors.append(line)
rots = []
for _ in range(4): # rotation
vals,colors = rot(vals), rot(colors)
rots.append([vals,colors])
put_dict[i] = rots
def addToMap(arr, dx, dy, total):
for i in range(4):
for j in range(4):
total[0][i+dx][j+dy] += arr[0][i][j]
total[0][i+dx][j+dy] = max(min(total[0][i+dx][j+dy],9),0)
total[1][i+dx][j+dy] = total[1][i+dx][j+dy] if arr[1][i][j]=='W' else arr[1][i][j]
return total
score_dict = {
'R': 7,
'B': 5,
'G': 3,
'Y': 2,
'W': 0
}
def calResult(total):
result = 0
for i in range(5):
for j in range(5):
result += total[0][i][j] * score_dict[total[1][i][j]]
return result
loc_dict = [[0,0],[0,1],[1,0],[1,1]]
max_value = 0
for gradi in permutations(range(n),3):
for loc_ori in product(*[range(4)]*6):
total_map = [[[0]*5 for _ in range(5)], [['W']*5 for _ in range(5)]]
loc, ori = loc_ori[:3], loc_ori[3:]
for g, l, o in zip(gradi, loc,ori):
total_map = addToMap(put_dict[g][o], *loc_dict[l],total_map)
max_value = max(max_value, calResult(total_map))
print(max_value)