BOJ
[백준 16935번 / java] 배열 돌리기 3
syj0522
2024. 6. 28. 19:38
문제
16935번: 배열 돌리기 3 (acmicpc.net)
코드
import java.io.*;
import java.util.*;
public class Main {
static int N, M;
static int[][] matrix;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());
matrix = new int[N][M];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
for(int j=0; j<M; j++){
matrix[i][j] = Integer.parseInt(st.nextToken());
}
}
int[] op = new int[R];
st = new StringTokenizer(br.readLine());
for(int i=0; i<R; i++){
op[i] = Integer.parseInt(st.nextToken());
}
for(int i=0; i<op.length; i++){
switch(op[i]){
case 1: matrix = op1(); break;
case 2: matrix = op2(); break;
case 3: matrix = op3(); break;
case 4: matrix = op4(); break;
case 5: matrix = op5(); break;
case 6: matrix = op6(); break;
default: break;
}
}
for(int[] tmp1: matrix){
for(int tmp2 : tmp1){
bw.write(tmp2 + " ");
}
bw.write("\n");
}
bw.flush();
bw.close();
}
static int[][] op1(){
int[][] ret = new int[N][M];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){ //모든 열에 대해
ret[i][j] = matrix[N-1-i][j];
}
}
return ret;
}
static int[][] op2(){
int[][] ret = new int[N][M];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
ret[i][j] = matrix[i][M-1-j];
}
}
return ret;
}
static int[][] op3(){
int[][] ret = new int[M][N];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
ret[j][N-1-i] = matrix[i][j];
}
}
int tmp = M;
M = N;
N = tmp;
return ret;
}
static int[][] op4(){
int[][] ret = new int[M][N];
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
ret[M-1-j][i] = matrix[i][j];
}
}
int tmp = M;
M = N;
N = tmp;
return ret;
}
static int[][] op5(){
int[][] ret = new int[N][M];
int _N = N/2;
int _M = M/2;
for(int i=0; i<_N; i++){
for(int j=0; j<_M; j++){
ret[i][j+_M] = matrix[i][j];
ret[i+_N][j+_M] = matrix[i][j+_M];
ret[i+_N][j] = matrix[i+_N][j+_M];
ret[i][j] = matrix[i+_N][j];
}
}
return ret;
}
static int[][] op6(){
int[][] ret = new int[N][M];
int _N = N/2;
int _M = M/2;
for(int i=0; i<_N; i++){
for(int j=0; j<_M; j++){
ret[i+_N][j] = matrix[i][j];
ret[i][j] = matrix[i][j+_M];
ret[i][j+_M] = matrix[i+_N][j+_M];
ret[i+_N][j+_M] = matrix[i+_N][j];
}
}
return ret;
}
}
Note
- 구현 문제에서 인덱스 접근 방법에 익숙해지자
- switch문에 break 빼먹지 않기