[백준] 16935 배열 돌리기 3

장철현·2024년 2월 12일
0

백준

목록 보기
71/80

링크

16935 배열 돌리기 3

문제

풀이

이 문제는 그냥 빡구현이다. 처음에 index를 잘못 설정해줘서 좀 애먹었지만 잘 구현하면 된다.

코드

import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;
import java.util.List;

public class Main{
    public static int[][] map;
    public static int[][] tmpMap;
    public static int n = 0;
    public static int m = 0;

    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        int count = Integer.parseInt(st.nextToken());

        map = new int[n][m];

        for(int i=0;i<map.length;i++){
            st = new StringTokenizer(br.readLine());

            for(int j=0;j<map[i].length;j++){
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        st = new StringTokenizer(br.readLine());
        for(int i=0;i<count;i++){
            func(Integer.parseInt(st.nextToken()));
        }

        StringBuilder sb = new StringBuilder();
        for(int i=0;i<map.length;i++){
            for(int j=0;j<map[i].length;j++){
                sb.append(map[i][j]).append(" ");
            }
            sb.append("\n");
        }

        System.out.println(sb.toString());

    }

    public static void func(int k){
        if(k == 1){
            tmpMap = new int[n][m];
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    tmpMap[n-i-1][j] = map[i][j];  //행만 서로 반대
                }
            }
            map = tmpMap;

        } else if(k == 2){
            tmpMap = new int[n][m];
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    tmpMap[i][m-j-1] = map[i][j]; //열만 반대
                }
            }
            map = tmpMap;

        } else if(k == 3){
            tmpMap = new int[m][n];

            for(int i=0; i<n; i++){

                for(int j=0; j<m; j++){
                    //System.out.println("i, j : " + i + ", " + j);
                    //System.out.println(j + ", " + (n-i-1));
                    tmpMap[j][n-i-1] =  map[i][j];
                }
            }
            //배열 바꾸기 => 결과 배열 크기 다르므로
            int tmp = n;
            n = m;
            m= tmp;

            map = tmpMap;

        } else if(k == 4){
            //4번 연산 : 왼쪽 90도 회전
            tmpMap = new int[m][n];
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    tmpMap[m-j-1][i] =  map[i][j];
                }
            }
            //배열 바꾸기
            int tmp = n;
            n = m;
            m= tmp;

            map = tmpMap;

        } else if(k == 5){
            tmpMap = new int[n][m];
            for(int i=0; i<n/2; i++){
                for(int j=0; j<m/2; j++){
                    tmpMap[i][m/2+j] = map[i][j];

                }
            }

            // 0,4 -> 3,4
            for(int i=0; i<n/2; i++){
                for(int j=m/2; j<m; j++){
                    tmpMap[n/2+i][j] = map[i][j];
                }
            }
            // 3,4 -> 3,0
            for(int i=n/2; i<n; i++){
                for(int j=m/2; j<m; j++){
                    tmpMap[i][j-m/2] = map[i][j];
                }
            }
            // 3,0 -> 0,0
            for(int i=n/2; i<n; i++){
                for(int j=0; j<m/2; j++){
                    tmpMap[i-n/2][j] = map[i][j];
                }
            }
            map = tmpMap;


        } else if(k == 6){
            tmpMap = new int[n][m];
            // 0,0 -> 3,0
            for(int i=0; i<n/2; i++){
                for(int j=0; j<m/2; j++){
                    tmpMap[n/2+i][j] = map[i][j];

                }
            }


            // 3,0 -> 3,4
            for(int i=n/2; i<n; i++){
                for(int j=0; j<m/2; j++){
                    tmpMap[i][j+m/2] = map[i][j];
                }
            }
            // 3,4 -> 0,4
            for(int i=n/2; i<n; i++){
                for(int j=m/2; j<m; j++){
                    tmpMap[i-n/2][j] = map[i][j];
                }
            }


            // 0,4 -> 0,0
            for(int i=0; i<n/2; i++){
                for(int j=m/2; j<m; j++){
                    tmpMap[i][j-m/2] = map[i][j];
                }
            }

            map = tmpMap;

        }


    }


}

0개의 댓글