[백준][파이썬] 17406번 - 배열 돌리기 4
문제 번호 : 17406번 - 배열 돌리기 4
문제 출처 : https://www.acmicpc.net/problem/17406
Code
from itertools import permutations
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
val = []
def matrix_value(ans):
for i in range(n):
ans = min(ans, sum(matrix[i]))
return ans
def rotate(rcs):
r, c, s = rcs
for i in range(1, s+1):
tmp = matrix[r - 1 - i][c - 1 - i]
x = r - i - 1
y = c - i - 1
for j in range(4):
for k in range(2*i):
nx = x + dx[j]
ny = y + dy[j]
matrix[x][y] = matrix[nx][ny]
x, y = nx, ny
matrix[r-1-i][c-i] = tmp
n, m, k = map(int, input().split())
a = [[] for _ in range(n)]
for h in range(n):
a[h] = list(map(int, input().split()))
rotation = [[] for _ in range(k)]
for i in range(k):
rotation[i] = list(map(int, input().split()))
answer = 1e9
orders = permutations(rotation)
for order in orders:
matrix = [a[row][:] for row in range(n)]
for rcs in order:
rotate(rcs)
answer = matrix_value(answer)
print(answer)
Idea
- 회전하는 경우의 수를 순열을 통해서 구한다. K의 최대값이 6이기 때문에
6! = 720
개의 경우가 만들어진다. - 각 경우의 수마다 배열을 복사하고 회전을 시킨 후 각 행마다 최솟값인지 확인한다.
'프로그래밍 > BAEKJOON' 카테고리의 다른 글
[백준][파이썬] 23080번 - 스키테일 암호 (0) | 2021.10.07 |
---|---|
[백준][파이썬] 17089번 - 세 친구 (0) | 2021.09.17 |
[백준][파이썬] 2422번 - 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.09.16 |
[백준][파이썬] 2210번 - 숫자판 점프 (0) | 2021.08.21 |
[백준][파이썬] 15686번 - 치킨 배달 (0) | 2021.08.21 |