코딩테스트/SWEA
[SWEA] (D2) 1961. 숫자 배열 회전
l0o0lv
2024. 10. 31. 21:48
N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
[풀이]
아래 예제에서 90도, 180도, 270도 회전한 배열의 결괏값이다.
여기서 규칙을 한가지 볼 수 있다.
회전을 할 때, 기존 배열의 2,0부터 0,0까지의 값을 회전할 배열의 첫 번째 줄에 넣으면 된다.
두 번째 줄은 2,1 그리고 세 번째 줄은 2,2 부터 시작해 행을 하나씩 줄여준다.
이걸 반복하고 출력해주면 된다.
풀고 나서 보니 회전하는 코드는 따로 메소드를 분리시켜 사용하면 중복성을 줄일 수 있을 것 같다.
import java.util.*;
import java.lang.*;
import java.io.*;
class Solution {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i = 1 ; i <= testCase ; i++){
System.out.println("#" + i);
int arrSize = Integer.parseInt(br.readLine());
int[][] arr = new int[arrSize][arrSize];
int[][] onceRotate = new int[arrSize][arrSize];
int[][] secondRotate = new int[arrSize][arrSize];
int[][] thirdRotate = new int[arrSize][arrSize];
for(int j = 0 ; j < arrSize ; j++){
st = new StringTokenizer(br.readLine());
for(int k = 0 ; k < arrSize ; k++){
arr[j][k] = Integer.parseInt(st.nextToken());
}
}
for(int j = 0 ; j < arrSize ; j++){
int rotateIndex = arrSize - 1;
for(int k = 0 ; k < arrSize ; k++){
onceRotate[j][k] = arr[rotateIndex][j];
rotateIndex--;
}
}
for(int j = 0 ; j < arrSize ; j++){
int rotateIndex = arrSize - 1;
for(int k = 0 ; k < arrSize ; k++){
secondRotate[j][k] = onceRotate[rotateIndex][j];
rotateIndex--;
}
}
for(int j = 0 ; j < arrSize ; j++){
int rotateIndex = arrSize - 1;
for(int k = 0 ; k < arrSize ; k++){
thirdRotate[j][k] = secondRotate[rotateIndex][j];
rotateIndex--;
}
}
for(int j = 0 ; j < arrSize ; j++){
for(int k = 0 ; k < arrSize ; k++){
System.out.print(onceRotate[j][k]);
}
System.out.print(" ");
for(int k = 0 ; k < arrSize ; k++){
System.out.print(secondRotate[j][k]);
}
System.out.print(" ");
for(int k = 0 ; k < arrSize ; k++){
System.out.print(thirdRotate[j][k]);
}
System.out.println("");
}
}
}
}
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com