풀이
- 입력받은 배열을 처음에 90도 돌려서 새로운 배열에 저장해준다.
- 위에도 90도 돌린 배열을 다시 돌리면 180도가 되고 다시 이 배열을 돌리면 270도가 된다.
- 90도씩 회전하는 rotate함수
- 새로운 배열에 배열을 돌려서 저장한 후에 새로운 배열을 리턴한다.
- 90도를 돌리면 1행이 N열로, 2행이 N-1열로, ,,, , N행이 1열로 된다.
- 새로운 배열에서 N열부터 감소해가며 모든 열을 채워준다.
- 각 열에서는 1행부터 순서대로 채워준다.
import java.io.*; import java.util.*; public class Solution { static int N; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(br.readLine()); for(int tc=1; tc<=T; tc++) { N = Integer.parseInt(br.readLine()); int[][] arr = new int[N][N]; StringTokenizer st; for(int i=0; i<N; i++) { st = new StringTokenizer(br.readLine()); for(int j=0; j<N; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } //기존의 배열을 90도 회전 int[][] arr90 = rotate(arr); //90도 회전한 배열을 다시 90도 회전 == 180도 회전 int[][] arr180 = rotate(arr90); //180도 회전한 배열을 다시 90도 회전 == 270도 회전 int[][] arr270 = rotate(arr180); System.out.println("#"+tc); for(int i=0; i<N; i++) { //90도 회전 배열 출력 for(int j=0; j<N; j++) { System.out.print(arr90[i][j]); } System.out.print(" "); //180도 회전 배열 출력 for(int j=0; j<N; j++) { System.out.print(arr180[i][j]); } System.out.print(" "); //270도 회전 배열 출력 for(int j=0; j<N; j++) { System.out.print(arr270[i][j]); } System.out.println(); } } } //90도 회전시키는 함수 static int[][] rotate(int[][] arr) { int[][] newarr = new int[N][N]; //새로운 배열에다 회전한 값을 넣어준다. int k = 0; //기존 배열의 행을 가르키는 index for(int j=N-1; j>=0; j--) { for(int i=0; i<N; i++) { //새로운 배열에는 마지막 열(N-1)부터, 각 열에서는 첫 행(0)부터 채워준다. //기존 배열의 k행 i열값을 넣어준다. (0행0열부터 순차대로 넣어준다) newarr[i][j] = arr[k][i]; } k++; } return newarr; } }
'SWEA > D2' 카테고리의 다른 글
[SWEA] 1954. 달팽이 숫자 (0) | 2019.05.14 |
---|---|
[SWEA] 1959. 두 개의 숫자열 (0) | 2019.05.14 |
[SWEA] 1974. 스도쿠 검증 (0) | 2019.05.03 |
[SWEA] 1970. 쉬운 거스름돈 (0) | 2019.05.03 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 (0) | 2019.05.02 |