[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]
- 90도 :
코드
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);
}
}
느낀점
생략
댓글남기기