본문 바로가기

ALGORITHM/OTHER

[Java] 16926 배열 돌리기 1, 16935 배열 돌리기 3

 

16926 배열 돌리기 1 - 구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.io.FileInputStream;

class boj_16926 {

    static int[] dx = {1, 0, -1, 0};
    static int[] dy = {0, 1, 0, -1};

    static int N, M, R, rotation;
    static int[][] arr;

    static void rotate(int count) {
        int x = count, y = count;
        int direction = 0;

        int width = M - count * 2;
        int height = N - count * 2;

        int temp = arr[x][y];

        for (int i=0; i<width-1; i++) {
            arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
            x = x + dx[direction];
            y = y + dy[direction];
        }
        direction++;

        for (int i=0; i<height-1; i++) {
            arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
            x = x + dx[direction];
            y = y + dy[direction];
        }
        direction++;

        for (int i=0; i<width-1; i++) {
            arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
            x = x + dx[direction];
            y = y + dy[direction];
        }
        direction++;

        for (int i=0; i<height-1; i++) {
            arr[y][x] = arr[y + dy[direction]][x + dx[direction]];
            x = x + dx[direction];
            y = y + dy[direction];
        }

        arr[count+1][count] = temp;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // testCase = Integer.parseInt(br.readLine());

        StringTokenizer token = new StringTokenizer(br.readLine());
        N = Integer.parseInt(token.nextToken());
        M = Integer.parseInt(token.nextToken());
        R = Integer.parseInt(token.nextToken());

        arr = new int[N][M];

        for (int i=0; i<N; i++) {
            token = new StringTokenizer(br.readLine());
            for (int j=0; j<M; j++) {
                arr[i][j] = Integer.parseInt(token.nextToken());
            }
        }

        rotation = Math.min(N, M) / 2;
        for (int i=0; i<R; i++) {
            for (int r = 0; r < rotation; r++) {
                rotate(r);
            }
        }

        for (int i=0; i<N; i++) {
            for (int j=0; j<M; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }

    }
}

 

 

16935 배열 돌리기 3 - 구현

중간에 화나서 하드코딩..

import java.util.*;
import java.io.*;

public class hwalgo07_서울_10반_하늘이 {

    static int N, M, R, temp, r;
    static int[][] arr, tempArr;

    static void swap(int x1, int y1, int x2, int y2) {
        temp = arr[y1][x1];
        arr[y1][x1] = arr[y2][x2];
        arr[y2][x2] = temp;
    }

    static void changeNM() {
        temp = N;
        N = M;
        M = temp;
    }

    static void copyArr() {
        tempArr = new int[N][M];
        for (int i=0; i<N; i++) {
            for (int j=0; j<M; j++) {
                tempArr[i][j] = arr[i][j];
            }
        }
    }

    // 상하
    static void func1() {
        for (int i=0; i<M; i++) {
            for (int j=0; j<N/2; j++) {
                swap(i, j, i, N-j-1);
            }
        }
    }

    // 좌우
    static void func2() {
        for (int i=0; i<M/2; i++) {
            for (int j=0; j<N; j++) {
                swap(i, j, M-i-1, j);
            }
        }
    }

    // 오른쪽 90
    static void func3() {
        copyArr();

        for (int i=0; i<M; i++) {
            for (int j=0; j<N; j++) {
                arr[i][j] = tempArr[N-j-1][i];
            }
        }
        changeNM();
    }

    // 왼쪽 90
    static void func4() {
        copyArr();

        for (int i=0; i<M; i++) {
            for (int j=0; j<N; j++) {
                arr[i][j] = tempArr[j][M-i-1];
            }
        }
        changeNM();
    }

    // 4등분 오른쪽
    static void func5() {
        // 렛츠하드코딩
        copyArr();

        for (int i=0; i<N/2; i++) {
            for (int j=0; j<M/2; j++) {
                arr[i][j] = tempArr[N/2+i][j];
            }
        }
        for (int i=0; i<N/2; i++) {
            for (int j=M/2; j<M; j++) {
                arr[i][j] = tempArr[i][j-M/2];
            }
        }
        for (int i=N/2; i<N; i++) {
            for (int j=M/2; j<M; j++) {
                arr[i][j] = tempArr[i-N/2][j];
            }
        }
        for (int i=N/2; i<N; i++) {
            for (int j=0; j<M/2; j++) {
                arr[i][j] = tempArr[i][M/2+j];
            }
        }
    }

    // 4등분 왼쪽
    static void func6() {
        copyArr();

        for (int i=0; i<N/2; i++) {
            for (int j=0; j<M/2; j++) {
                arr[i][j] = tempArr[i][j+M/2];
            }
        }
        for (int i=0; i<N/2; i++) {
            for (int j=M/2; j<M; j++) {
                arr[i][j] = tempArr[i+N/2][j];
            }
        }
        for (int i=N/2; i<N; i++) {
            for (int j=M/2; j<M; j++) {
                arr[i][j] = tempArr[i][j-M/2];
            }
        }
        for (int i=N/2; i<N; i++) {
            for (int j=0; j<M/2; j++) {
                arr[i][j] = tempArr[i-N/2][j];
            }
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        StringTokenizer token = new StringTokenizer(br.readLine());

        N = Integer.parseInt(token.nextToken());
        M = Integer.parseInt(token.nextToken());
        R = Integer.parseInt(token.nextToken());

        int size = Math.max(N, M);
        arr = new int[size][size];

        for (int i=0; i<N; i++) {
            token = new StringTokenizer(br.readLine());
            for (int j=0; j<M; j++) {
                arr[i][j] = Integer.parseInt(token.nextToken());
            }
        }

        token = new StringTokenizer(br.readLine());
        for (int i=0; i<R; i++) {
            r = Integer.parseInt(token.nextToken());
            switch (r) {
                case 1: func1();    break;
                case 2: func2();    break;
                case 3: func3();    break;
                case 4: func4();    break;
                case 5: func5();    break;
                case 6: func6();    break;
            }
        }


        for (int i=0; i<N; i++) {
            for (int j=0; j<M; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();
        }
    }
}