from itertools import permutations
import sys
input = sys.stdin.readline
def rotate(command,moving_arr):
global arr
cnt = 1
while cnt<=command[2]:
start_row,start_col = command[0]-cnt, command[1]-cnt
end_row,end_col = command[0] + cnt,command[1] + cnt
for row in range(start_row,end_row+1):
if row == start_row or row == end_row:
if row == start_row:
for col in range(start_col,end_col+1):
if col == end_col:
moving_arr[row+1][col] = prev_arr[row][col]
else:
moving_arr[row][col+1] = prev_arr[row][col]
else:
for col in range(end_col,start_col-1,-1):
if col == start_col:
moving_arr[row-1][col] = prev_arr[row][col]
else:
moving_arr[row][col-1] = prev_arr[row][col]
else:
moving_arr[row-1][start_col] = prev_arr[row][start_col]
moving_arr[row+1][end_col] = prev_arr[row][end_col]
cnt += 1
N,M,K = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(N)]
command_list = []
for _ in range(K):
x,y,r = map(int,input().split())
command_list.append((x-1,y-1,r))
result = float('inf')
for commands in permutations(command_list):
move_arr = [row[:] for row in arr]
prev_arr = [row[:] for row in arr]
for command in commands:
rotate(command,move_arr)
prev_arr = [row[:] for row in move_arr]
arr_min = min(list(map(sum,move_arr)))
result = min(arr_min,result)
print(result)
from itertools import permutations
import sys
input = sys.stdin.readline
def rotate(command,move_arr):
x,y,s = command
for i in range(1,s+1):
subtract_data = move_arr[x-i][y-i] # 좌측 최상단 꼭지점을 빼놓기
for r in range(x-i,x+i): # 좌측 세로를 아래에서 위로 올리는 과정
move_arr[r][y-i] = move_arr[r+1][y-i]
for c in range(y-i,y+i):
move_arr[x+i][c] = move_arr[x+i][c+1]
for r in range(x+i,x-i,-1):
move_arr[r][y+i] = move_arr[r-1][y+i]
for c in range(y+i,y-i+1,-1):
move_arr[x-i][c] = move_arr[x-i][c-1]
move_arr[x-i][y-i+1] = subtract_data
N,M,K = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(N)]
command_list = []
for _ in range(K):
x,y,r = map(int,input().split())
command_list.append((x-1,y-1,r))
result = float('inf')
for commands in permutations(command_list):
move_arr = [row[:] for row in arr]
for command in commands:
rotate(command,move_arr)
arr_min = min(list(map(sum,move_arr)))
result = min(arr_min,result)
print(result)
'알고리즘 > 백준_복기_미완료' 카테고리의 다른 글
[BOJ/백준] 17837 새로운 게임 2 (0) | 2021.05.06 |
---|---|
[BOJ/백준] 17779 게리맨더링 2 (0) | 2021.05.06 |
[BOJ/백준] 17404 RGB 거리 2 (0) | 2021.05.06 |
[BOJ/백준] 17298 오큰수 (0) | 2021.05.06 |
[BOJ/백준] 17281 ⚾ (0) | 2021.05.06 |