문제
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 빼먹지 않기
'BOJ' 카테고리의 다른 글
[백준 2688번 / java] 줄어들지 않아 (0) | 2024.06.30 |
---|---|
[백준 3019번 / java] 테트리스 (0) | 2024.06.29 |
[백준 17829 / java] 222-풀링 (0) | 2024.06.28 |
[백준 24445번 / java] 알고리즘 수업 - 너비 우선 탐색 2 (0) | 2024.06.26 |
[백준 11509 / java] 풍선맞추기 (0) | 2024.06.26 |