난이도 : GOLD IV
문제링크 : https://www.acmicpc.net/problem/17406
문제해결 아이디어
- 지정된 범위의 가로세로는 2s 이다 => 결국 s 만큼 회전함
- 좌 -> 하 -> 우 -> 상 순으로 회전을 시켰을때 (r-s,c-s+1) 값만 비정상적인 값이기 때문에 (r-s,c-s) 값을 tmp 로 저장한후 전체 회전후 값을 (r-s,c-s+1)에 대입해준다.
소스코드
from itertools import permutations
import copy
import sys
input = sys.stdin.readline
n, m, k = map(int, input().split())
board = [[]]
for _ in range(n):
board.append([0] + list(map(int, input().split())))
op = []
for _ in range(k):
op.append(list(map(int, input().split())))
# r-s,c-s r-s,c+s
# r+s,c-s r+s,c+s
def rotate(o,graph):
r, c, s = o
for j in range(s):
tmp = graph[r - s + j][c - s + j]
for i in range(r - s + j, r + s - j):# 좌
graph[i][c - s + j] = graph[i + 1][c - s + j]
for i in range(c - s + j, c + s-j): # 하
graph[r + s - j][i] = graph[r + s - j][i+1]
for i in range(r + s - j, r - s + j, -1): #우
graph[i][c + s - j] = graph[i - 1][c + s - j]
for i in range(c + s - j, c - s + j, -1): # 상
graph[r - s + j][i] = graph[r - s + j][i - 1]
graph[r - s + j][c - s + 1 + j] = tmp
maxVal = int(1e9)
for z in permutations(op):
g = copy.deepcopy(board)
for i in z:
rotate(i, g)
for i in range(1,n+1):
maxVal = min(maxVal, sum(g[i]))
print(maxVal)