728x90
1번에 비해 달라진 점은, 일정 횟수 이상 회전이 반복되면 처음과 동일해지므로, 그에 대한 처리를 해주면 된다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static StringBuilder sb = new StringBuilder();
static StringTokenizer st;
static int N, M, rotate;
static int map[][];
private static void dataInput() throws IOException {
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
rotate = Integer.parseInt(st.nextToken());
map = new int[N][M];
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
}
private static void rotatePeel(int y, int x, int H, int W) { // 회전 시작점, 세로, 가로 길이
int start = map[y][x];
// 상
for(int p=x; p<x+W-1; p++) {
map[y][p]=map[y][p+1];
}
// 우
for(int p=y; p<y+H-1; p++) {
map[p][x+W-1]=map[p+1][x+W-1];
}
// 하
for(int p=x+W-1; p>x; p--) {
map[y+H-1][p]=map[y+H-1][p-1];
}
// 좌
for(int p=y+H-1; p>=y+1; p--) {
map[p][x]=map[p-1][x];
}
map[y+1][x]=start;
}
private static void rotateMatrixEvenN(int n,int min_side) {
int backtToOrigin = (N+M)*2-4; // backToOrigin 추가
int cnt = 0;
while(cnt<min_side/2) {
for(int i=0; i<(n%backtToOrigin); i++) {
rotatePeel(cnt,cnt,N-2*cnt,M-2*cnt);
}
backtToOrigin-=8;
cnt++;
}
}
public static void main(String[] args) throws IOException {
dataInput();
// rotatePeel(0,0,N,M);
rotateMatrixEvenN(rotate, Math.min(N, M));
for(int i=0; i<N; i++) {
for(int j=0; j<M; j++) {
sb.append(map[i][j]+" ");
}
sb.append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
'[Algorithms] > [Problems]' 카테고리의 다른 글
BOJ. 17406번. 배열 돌리기 4 (0) | 2021.02.14 |
---|---|
BOJ. 16935번. 배열 돌리기 3 (0) | 2021.02.14 |
BOJ. 16926번. 배열 돌리기 1 (0) | 2021.02.14 |
BOJ. 10799번. 쇠막대기 (0) | 2021.02.14 |
BOJ. 2615번. 오목 (0) | 2021.02.04 |