본문 바로가기
알고리즘

[백준/파이썬] #16926

by 룰루루 2025. 3. 10.

시도했던 풀이는 다음과 같다. 

N, M, R = map(int, input().split())

prev_array = []
for _ in range(N):
    prev_array.append(list(map(int, input().split())))
    
def get_next_index(row, col):
    # 몇 번쨰 밖의 사각형에 있는지 파악
    circle_radius = 0

    for _ in range(R):
        pass
    pass


answer_array = [[0] * M for _ in range(N)]
for i in range(N):
    for j in range(M):
        row_index, col_index = get_next_index(i, j)
        answer_array[row_index][col_index] = prev_array[i][j]


print("".join(answer_array))

 

참고한 풀이는 다음과 같다. 

from sys import stdin
from collections import deque

N, M, R = map(int, stdin.readline().split())

matrix = []
answer = [[0]*M for _ in range(N)]
deq = deque()

for i in range(N):
    matrix.append(list(stdin.readline().split()))

loops = min(N, M) // 2
for i in range(loops):
    deq.clear()
    deq.extend(matrix[i][i:M-i])
    deq.extend([row[M-i-1] for row in matrix[i+1:N-i-1]])
    deq.extend(matrix[N-i-1][i:M-i][::-1])
    deq.extend([row[i] for row in matrix[i+1:N-i-1]][::-1])
    
    deq.rotate(-R)
    
    for j in range(i, M-i):                 # 위쪽
        answer[i][j] = deq.popleft()
    for j in range(i+1, N-i-1):             # 오른쪽
        answer[j][M-i-1] = deq.popleft()
    for j in range(M-i-1, i-1, -1):           # 아래쪽
        answer[N-i-1][j] = deq.popleft()  
    for j in range(N-i-2, i, -1):           # 왼쪽
        answer[j][i] = deq.popleft()    

for line in answer:
    print(" ".join(line))