728x90
배열돌리기 문제를 1~4까지 풀어보았다. 당연히 붙은 번호가 높아질수록 난이도도 다소 올라간다.
배열 조작에 익숙해지는 재미가 있었다.
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 cnt = 0;
while(cnt<N/2) {
for(int i=0; i<n; i++) {
rotatePeel(cnt,cnt,N-2*cnt,M-2*cnt);
}
cnt++;
}
}
private static void rotateMatrixEvenM(int n) {
int cnt = 0;
while(cnt<M/2) {
for(int i=0; i<n; i++) {
rotatePeel(cnt,cnt,N-2*cnt,M-2*cnt);
}
cnt++;
}
}
public static void main(String[] args) throws IOException {
dataInput();
// rotatePeel(0,0,N,M);
if(N<M) {
rotateMatrixEvenN(rotate);
}else {
rotateMatrixEvenM(rotate);
}
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. 16927번. 배열 돌리기 2 (0) | 2021.02.14 |
BOJ. 10799번. 쇠막대기 (0) | 2021.02.14 |
BOJ. 2615번. 오목 (0) | 2021.02.04 |