문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

7035 : 2D 배열 테두리 회전

•시간제한: 1.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

7035 : 2D 배열 테두리 회전

시간 1.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N \times M$ 크기의 2차원 정수 행렬이 주어집니다. 이 행렬의 가장 바깥쪽 테두리를 포함하여 안쪽의 모든 겹(레이어)들의 테두리를 동시에 시계 방향으로 $R$칸만큼 회전시키는 프로그램을 작성하십시오.
껍질(레이어)은 바깥쪽에서부터 겹겹이 존재하며, 각 레이어의 원소들을 시계방향 순서대로 한 칸씩 민 결과를 구하면 됩니다.
예를 들어, $4 \times 4$ 행렬을 $1$칸 시계방향으로 회전시키면, 바깥쪽 테두리 $12$개 원소와 안쪽 테두리 $4$개 원소가 각각 시계 방향으로 $1$칸씩 밀려서 회전하게 됩니다.

[제약 조건]
• 행 크기 $N$, 열 크기 $M$: $2 \le N, M \le 300$ ($\min(N, M)$은 짝수)
• 회전 수 $R$: $1 \le R \le 1{,}000$

입력 설명

첫째 줄에 행 크기 $N$, 열 크기 $M$, 회전수 $R$이 공백으로 구분되어 주어집니다. ($2 \le N, M \le 300$, $1 \le R \le 1000$, $\min(N, M)$은 짝수)
둘째 줄부터 $N$개의 줄에 걸쳐 각 줄에 $M$개의 정수가 공백으로 구분되어 행렬의 원소로 주어집니다.

출력 설명

테두리 회전이 완료된 행렬을 $N$개의 줄에 걸쳐 $M$개의 정수를 공백으로 구분하여 출력합니다.

입력 예시
COPY
복사되었습니다!

4 4 1
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

출력 예시
COPY
복사되었습니다!

5 1 2 3
9 10 6 4
13 11 7 8
14 15 16 12

도움

각 껍질(레이어)마다 시계방향 순서대로 좌표를 추출하여 1차원 리스트로 만든 후, 회전수 $R$을 리스트의 길이 $L$로 나눈 나머지 R % L만큼 오른쪽으로 원소들을 슬라이싱 회전시킵니다. 이후 회전된 값을 다시 원래 좌표 순서대로 행렬에 덮어씁니다. 이 과정을 모든 레이어(개수 = min(N, M)/2)에 대해 반복합니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘