728x90
반응형
문제 바로가기
문제:
크기가 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은 가로라고 생각을 해 주면된다.
반응형
댓글