티스토리 뷰
#. 문제
* 이 문제의 저작권은 SW Expert Academy에 있습니다.
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
#. 문제 이해
- NxN 2차원 배열을 90도, 180도, 270도 회전한 모양을 출력
#. 풀이
1. 단순하게 생각하면 그냥 배열을 90도씩 회전시키기
(90도 회전된 배열을 또 90도 회전시키면 180도 회전, 180도 회전된 배열을 또 90도 회전시키면 270도 회전)
#. 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Solution1961 { static int[][] arr; static int N; public static void run() throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = Integer.parseInt(br.readLine()); for(int T=0; T<tc; T++) { // Number of test cases N = Integer.parseInt(br.readLine()); arr = new int[N][N]; // array // Store a matrix in an array for(int i=0; i<N; i++) { // Number of N StringTokenizer st = new StringTokenizer(br.readLine()); for(int j=0; j<N; j++) { arr[i][j] = Integer.parseInt(st.nextToken()); } } int[][] rotation_90 = Rotation(arr); // 90 degree rotation int[][] rotation_180 = Rotation(rotation_90); // 180 degree rotation int[][] rotation_270 = Rotation(rotation_180); // 270 degree rotation System.out.println("#" + (T+1)); for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { System.out.print(rotation_90[i][j]); // 90 degree rotated shape } System.out.print(" "); for(int j=0; j<N; j++) { System.out.print(rotation_180[i][j]); // 180 degree rotated shape } System.out.print(" "); for(int j=0; j<N; j++) { System.out.print(rotation_270[i][j]); // 270 degree rotated shape } System.out.println(""); } } } // 90 degree rotation public static int[][] Rotation(int[][] arr) { int[][] temp_arr = new int[N][N]; for(int i=0; i<N; i++) { for(int j=0; j<N; j++) { temp_arr[i][j] = arr[N-1-j][i]; } } return temp_arr; } public static void main(String[] args) throws Exception { Solution1961.run(); } } | cs |
#. 결과
- Input --------------------------------------------------------
10
3
1 2 3
4 5 6
7 8 9
6
6 9 4 7 0 5
8 9 9 2 6 5
6 8 5 4 9 8
2 2 7 7 8 4
7 5 1 9 7 9
8 9 3 9 7 6
…
------------------------------------------------------------------
- Output --------------------------------------------------------
#1
741 987 369
852 654 258
963 321 147
#2
872686 679398 558496
952899 979157 069877
317594 487722 724799
997427 894586 495713
778960 562998 998259
694855 507496 686278
…
------------------------------------------------------------------
'PS > Problem_Solving' 카테고리의 다른 글
[Algospot] BOGGLE(재귀 호출, 동적계획법) (0) | 2019.09.03 |
---|---|
[SWEA] 1240. 단순 2진 암호코드(JAVA) (0) | 2019.08.10 |
[SWEA] 4613. 러시아 국기 같은 깃발(JAVA) (0) | 2019.07.25 |
[SWEA] 4615. 재미있는 오셀로 게임(JAVA) (0) | 2019.07.22 |
[SWEA] 1204. 최빈수 구하기(JAVA) (0) | 2019.06.28 |