본문 바로가기
백준알고리즘/구현

(Python/🥈1)백준 알고리즘 16926번: 배열 돌리기1

by windy7271 2023. 9. 10.
728x90
반응형

 

문제 바로가기 

배열돌리기1

문제:

크기가 N×M인 배열이 있을 때, 배열을 돌려보려고 한다. 배열은 다음과 같이 반시계 방향으로 돌려야 한다.

입력:

첫째 줄에 배열의 크기 N, M과 수행해야 하는 회전의 수 R이 주어진다. 둘째 줄부터 N개의 줄에 배열 A의 원소 Aij가 주어진다.

출력:

입력으로 주어진 배열을 R번 회전시킨 결과를 출력한다.

 

풀이:

 

import sys
from collections import deque

sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')

N, M, R = map(int,sys.stdin.readline().rstrip().split(" "))
board = []
deq = deque()

for i in range(N):
    board.append(list(map(int,sys.stdin.readline().split())))

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

	for j in range(i, M-i): 
        board[i][j] = deq.popleft()
    for j in range(i+1,N-i-1):
        board[j][M-i-1] = deq.popleft()
    for j in range(M-1-i,i-1,-1) : # 왼쪽으로 가로
        board[N-i-1][j] = deq.popleft()
    for j in range(N-i-2,i,-1): # 맨왼쪽 위로
        board[j][i] = deq.popleft()
for i in board:
    print(*i)

 

N * M 

N 은 세로, M은 가로라고 생각을 해 주면된다.

 

반응형

댓글