시도했던 풀이는 다음과 같다.
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))
'알고리즘' 카테고리의 다른 글
[백준/파이썬] #14719 (0) | 2025.03.13 |
---|---|
[백준/파이썬] #16719 (0) | 2025.03.11 |
[백준/파이썬] #20207 (0) | 2025.03.09 |
[프로그래머스] 게임 맵 최단거리(파이썬) (0) | 2024.01.17 |
[카카오 2024 인턴십 코테] 산 모양 타일링 (0) | 2024.01.17 |