[java]숫자 배열 회전 - SWEA 1961

풀이

문제 해석을 하자면,

  • 90도, 180도, 270도 회전한 배열 모양을 나타내라


풀이

  • n*n 정방행렬
    • 90도 : A[x][y] => A[N-1-y][x]
    • 180도 : A[x][y] => A[N-1-x][M-1-y]
    • 270도 : A[x][y] => A[y][M-1-x]



코드

import java.io.*;
import java.util.*;
public class 숫자배열회전_1961 {

  public static int[][] rotate(int ro, int N, int[][] inArr) {
    int[][] copyArr = new int[N][N];
    // 1. 새로 복제
    for(int i=0; i<N; i++) {
      for(int j=0; j<N; j++) {
        copyArr[i][j] = inArr[i][j];
      }
    }
    // 2. swap
    if(ro == 90) {
      for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
          copyArr[i][j] = inArr[N-1-j][i];
        }
      }
    }else if(ro == 180) {
      for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
          copyArr[i][j] = inArr[N-1-i][N-1-j];
        }
      }
    }else if(ro == 270) {
      for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
          copyArr[i][j] = inArr[j][N-1-i];
        }
      }
    }
    return copyArr;
  }

  public static void main(String[] args) throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    int T = Integer.parseInt(br.readLine());
    for(int t=1; t<=T; t++) {
      //input
      int N = Integer.parseInt(br.readLine());
      int[][] inArr = new int[N][N]; // 매번 새로 할당
      for(int i=0; i<N; i++) {
        StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
        for(int j=0; j<N; j++) {
          inArr[i][j] = Integer.parseInt(stk.nextToken());
        }
      }
      //run
      int[][] arr90 = rotate(90, N, inArr);
      int[][] arr180 = rotate(180, N, inArr);
      int[][] arr270 = rotate(270, N, inArr);
      //output
      sb.append("#"+t+"\n");
      for(int i=0; i<N; i++) {
        for(int j=0; j<N; j++) sb.append(arr90[i][j]);
        sb.append(" ");
        for(int j=0; j<N; j++) sb.append(arr180[i][j]);
        sb.append(" ");
        for(int j=0; j<N; j++) sb.append(arr270[i][j]);
        sb.append("\n");
      }
    }
    System.out.print(sb);
  }

}



느낀점

생략

댓글남기기