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 빼먹지 않기