Jae-Kyung Cho LLM Developers who was a Robotics engineer

Baekjoon-15898-피아의 아틀리에

Python으로 풀 수 없는 문제!!

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)
Comments