728x90
SMALL
🐹 문제
https://www.acmicpc.net/problem/16926
🐹 풀이
한 층을 리스트로 반환 하여 queue의rotate를 사용하여 회전한다.
import sys
from collections import deque
def rotate_layer(layer, R):
"""한 층의 요소를 R번 회전한 후 반환"""
queue = deque(layer)
queue.rotate(-R) # 왼쪽으로 R번 회전
return list(queue)
def get_layer(matrix, layer_idx, N, M):
"""layer_idx 번째 껍질의 요소들을 추출"""
layer = []
# 위(왼쪽 → 오른쪽)
for j in range(layer_idx, M - layer_idx):
layer.append(matrix[layer_idx][j])
# 오른쪽(위쪽 → 아래쪽)
for i in range(layer_idx + 1, N - layer_idx):
layer.append(matrix[i][M - layer_idx - 1])
# 아래 (오른쪽 → 왼쪽)
for j in range(M - layer_idx - 2, layer_idx - 1, -1):
layer.append(matrix[N - layer_idx - 1][j])
# 왼쪽(아래쪽 → 위쪽)
for i in range(N - layer_idx - 2, layer_idx, -1):
layer.append(matrix[i][layer_idx])
return layer
def set_layer(matrix, layer_idx, rotated_layer, N, M):
"""회전된 layer를 다시 matrix에 삽입"""
idx = 0
#위(왼쪽 → 오른쪽)
for j in range(layer_idx, M - layer_idx):
matrix[layer_idx][j] = rotated_layer[idx]
idx += 1
#오른쪽(위쪽 → 아래쪽)
for i in range(layer_idx + 1, N - layer_idx):
matrix[i][M - layer_idx - 1] = rotated_layer[idx]
idx += 1
#아래(오른쪽 → 왼쪽)
for j in range(M - layer_idx - 2, layer_idx - 1, -1):
matrix[N - layer_idx - 1][j] = rotated_layer[idx]
idx += 1
#왼쪽(아래쪽 → 위쪽)
for i in range(N - layer_idx - 2, layer_idx, -1):
matrix[i][layer_idx] = rotated_layer[idx]
idx += 1
def rotate_matrix(matrix, N, M, R):
"""전체 행렬을 R번 회전"""
num_layers = min(N, M) // 2 # 회전할 껍질(layer)의 개수
for layer_idx in range(num_layers):
layer = get_layer(matrix, layer_idx, N, M)
rotated_layer = rotate_layer(layer, R)
set_layer(matrix, layer_idx, rotated_layer, N, M)
N, M, R = map(int, sys.stdin.readline().split())
matrix = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
rotate_matrix(matrix, N, M, R)
for row in matrix:
print(*row)
728x90
LIST
'코테공부' 카테고리의 다른 글
[SW Expert Academy]1954. 달팽이 숫자 (0) | 2024.11.18 |
---|---|
[SW Expert Academy]1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) | 2024.11.17 |
[SW Expert Academy] 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2024.11.16 |
[SW Expert Academy] 20936. 상자 정렬하기 (0) | 2024.11.15 |
[SW Expert Academy] 2072. 홀수만 더하기 (0) | 2024.11.12 |