728x90
https://www.acmicpc.net/problem/17406
from itertools import permutations
import copy
import sys
input = sys.stdin.readline
n, m, k = map(int, input().split())
array = []
for i in range(n):
array.append(list(map(int, input().split())))
# 배열 돌리기
def turn(r, c, s):
global temp_array
x1, y1 = r-s, c-s # left top
x2, y2 = r+s, c+s # right bottom
while True:
if x1 == x2 and y1 == y2:
break
temp = temp_array[x1][y1]
# left
for i in range(x1, x2):
move = temp_array[i+1][y1]
temp_array[i][y1] = move
# bottom
for i in range(y1, y2):
move = temp_array[x2][i+1]
temp_array[x2][i] = move
# right
for i in range(x2, x1, -1):
move = temp_array[i-1][y2]
temp_array[i][y2] = move
#top
for i in range(y2, y1, -1):
move = temp_array[x1][i-1]
temp_array[x1][i] = move
temp_array[x1][y1+1] = temp
x1 += 1
y1 += 1
x2 -= 1
y2 -= 1
turns = []
# 연산 정보
for _ in range(k):
r, c, s = map(int, input().split())
turns.append((r-1, c-1, s))
answer = int(1e9)
def get_min_value(temp_array):
return min([sum(row) for row in temp_array])
# 연산 순서 정해주기
for line_up in permutations(turns, k):
temp_array = copy.deepcopy(array)
for data in line_up:
r, c, s = data
turn(r, c, s)
# get value of the array
answer = min(answer, get_min_value(temp_array))
print(answer)
728x90
'Algorithm (PS)' 카테고리의 다른 글
백준 17615번: 볼 모으기 (Python/파이썬) - Greedy (0) | 2022.12.25 |
---|---|
[백준] 17471번: 게리맨더링 (파이썬/Python) - bfs, brute force (1) | 2022.12.25 |
[백준] 2098 외판원 순회 Swift (0) | 2022.12.17 |
[백준] 12933번 : 오리 Swift 풀이 - 구현 (0) | 2022.12.16 |
[프로그래머스] 행렬의 곱셈 Swift - 구현/선형대수학 (0) | 2022.12.14 |