-
[BOJ] 배열 돌리기 3Algorithm/BOJ 2020. 2. 11. 21:06
[16935] 배열 돌리기 3
https://www.acmicpc.net/problem/16935
- d크기가 N x M인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 총 6가지가 있다.
- 1. 상하 반전
- 2. 좌우 반전
- 3. 오른쪽으로 90도 회전
- 4. 왼쪽으로 90도 회전
- 5, 6. 배열을 크기가 N/2 x M/2인 4개의 부분 배열로 나누어 시계방향, 반시계방향으로 이동
Solution
- 문제 조건에 맞추어 구현하였다.
- 하면서 너무너무너무 풀기 싫었다.
소스코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;public class Main {static int n, m, r;static int[] dx = { 0, 1, 0, -1 };static int[] dy = { 1, 0, -1, 0 };static int[][] arr;static List<Integer> opList;static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));StringTokenizer st = new StringTokenizer(br.readLine());n = stoi(st.nextToken());m = stoi(st.nextToken());r = stoi(st.nextToken());arr = new int[n + 1][m + 1];for (int i = 1; i <= n; i++) {st = new StringTokenizer(br.readLine());for (int j = 1; j <= m; j++) {arr[i][j] = stoi(st.nextToken());}}opList = new ArrayList<>();st = new StringTokenizer(br.readLine());for (int i = 0; i < r; i++) {opList.add(stoi(st.nextToken()));}for (int i : opList) {switch (i) {case 1:one();break;case 2:two();break;case 3:three();break;case 4:four();break;case 5:five();break;case 6:six();break;default:break;}}print(arr);bw.flush();bw.close();}static void one() {for (int i = 1; i <= arr.length / 2; i++) {int[] temp = arr[i];arr[i] = arr[arr.length - i];arr[arr.length - i] = temp;}}static void two() {for (int i = 1; i < arr.length; i++) {for (int j = 1; j <= arr[i].length / 2; j++) {int temp = arr[i][j];arr[i][j] = arr[i][arr[i].length - j];arr[i][arr[i].length - j] = temp;}}}static void three() {int[][] temp = copy(arr);n = temp.length -1;m = temp[0].length - 1;arr = new int[m+1][n+1];for (int i = 1, j = n; j >= 1; j--, i++) {for (int k = 1; k <= m; k++) {arr[k][j] = temp[i][k];}}}static void four() {int[][] temp = copy(arr);n = temp.length -1;m = temp[0].length - 1;arr = new int[m+1][n+1];for (int i = 1, j = 1; j <= n; j++, i++) {for (int k = 1; k <= m; k++) {arr[k][j] = temp[i][m - k + 1];}}}static void five() {int[][] temp = copy(arr);n = temp.length-1;m = temp[0].length-1;// 1 -> 2for (int j = 1; j <= n / 2; j++) {for (int i = 1; i <= m / 2; i++) {arr[j][m / 2 + i] = temp[j][i];}}// 3 -> 4for (int j = n / 2 + 1; j <= n; j++) {for (int i = m / 2 + 1; i <= m; i++) {arr[j][i - m / 2] = temp[j][i];}}// 2 -> 3for (int j = 1; j <= n / 2; j++) {for (int i = m / 2 + 1; i <= m; i++) {arr[j + n / 2][i] = temp[j][i];}}// 4 -> 1for (int j = n / 2 + 1; j <= n; j++) {for (int i = 1; i <= m / 2; i++) {arr[j - n / 2][i] = temp[j][i];}}}static void six() {int[][] temp = copy(arr);n = temp.length-1;m = temp[0].length-1;// 1 -> 4for (int j = 1; j <= n / 2; j++) {for (int i = 1; i <= m / 2; i++) {arr[j + n / 2][i] = temp[j][i];}}// 4 -> 3for (int j = n / 2; j <= n; j++) {for (int i = 1; i <= m / 2; i++) {arr[j][m / 2 + i] = temp[j][i];}}// 3 -> 2for (int j = n / 2 + 1; j <= n; j++) {for (int i = m / 2 + 1; i <= m; i++) {arr[j - n / 2][i] = temp[j][i];}}// 2 -> 1for (int j = 1; j <= n / 2; j++) {for (int i = m / 2 + 1; i <= m; i++) {arr[j][i - m / 2] = temp[j][i];}}}static int[][] copy(int[][] arr) {int[][] temp = new int[arr.length][arr[0].length];for (int i = 1; i <= arr.length-1; i++) {for (int j = 1; j <= arr[0].length-1; j++) {temp[i][j] = arr[i][j];}}return temp;}static void print(int arr[][]) throws IOException {for (int i = 1; i < arr.length; i++) {for (int j = 1; j < arr[i].length; j++) {bw.append(arr[i][j] + " ");}bw.newLine();}}static int stoi(String s) {return Integer.parseInt(s);}}cs 'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 연구소3 (0) 2020.04.28 [BOJ] 캐슬디펜스 (0) 2020.02.13 [BOJ] 배열 돌리기 1 (0) 2020.02.10 [BOJ] 게리멘더링 (0) 2020.02.10 [BOJ] 캠프 준비 (0) 2020.02.08