728x90
처음에 원본 배열을 90도 180도 270도를 각각 회전시키는 2중 반복문을 3개 만들었다.
그런데 출력 형식을 못 맞추겠는 거야 !
생각을 좀 하다가 일단 저것도 각각 구현할 필요가 없다고 느껴져서
rotation이라는 함수를 만들어서 90도 회전시키고 배열을 반환하게 했음.
그리고 180도 회전한건 90도 회전한 함수를 써서 나온 배열에 또 rotation 함수를 적용시켜주면 되는 것 !
package algorithm;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
/*
사용하는 클래스명이 Solution 이어야 하므로, 가급적 Solution.java 를 사용할 것을 권장합니다.
이러한 상황에서도 동일하게 java Solution 명령으로 프로그램을 수행해볼 수 있습니다.
*/
public class Solution
{
public static void main(String args[]) throws Exception
{
//System.setIn(new FileInputStream("C:\\so_Project\\workspace\\BaekJoon\\src\\algorithm\\input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); //테스트 케이스
for(int i=1;i<=T;i++) { //하나의 테스트케이스마다 반복
int N = Integer.parseInt(br.readLine());
int arr[][] = new int[N][N];
int arr_90[][] = new int[N][N];
int arr_180[][] = new int[N][N];
int arr_270[][] = new int[N][N];
for(int j=0;j<N;j++) { // N*N 행렬값 저장
StringTokenizer st = new StringTokenizer(br.readLine());
for(int k=0;k<N;k++) {
arr[j][k] = Integer.parseInt(st.nextToken());
}
}
arr_90 = rotation(arr,N);
arr_180 = rotation(arr_90,N);
arr_270 = rotation(arr_180,N);
System.out.println("#"+i+" ");
for(int k=0;k<N;k++) {
for(int m = 0;m<N;m++) {
System.out.print(arr_90[k][m]);
}
System.out.print(" ");
for(int m = 0;m<N;m++) {
System.out.print(arr_180[k][m]);
}
System.out.print(" ");
for(int m = 0;m<N;m++) {
System.out.print(arr_270[k][m]);
}
System.out.println(" ");
}
}//하나의 테스트 케이스마다 반복문 끝
}
public static int[][] rotation(int arr[][],int N){
int num[][] = new int[N][N];
int i=0;
for(int j=0;j<N;j++) { //열
int o=0;
for(int k=N-1;k>=0;k--) { //행
num[i][o] = arr[k][j];
o++;
}
i++;
}
return num;
}
}
근데 이제 rotation함수에서 나는 90도 회전하는 반복문을 만들어 새로운 배열 0,0 0,1 ... 해서 채워줬는데
아예 규칙을 찾아서 해주는 법도 있는 것 같다.
123 에서 741 이 되는 거니까
456 852
789 963
좌표의 변화는
0,0 -> 0,2 / 0,1 -> 1,1 / 0,2 -> 2,2 / 1,0 -> 0,1 / 1,1 -> 1,1 / 1,2 -> 2,1 /2,0->0,0/ 2,1-> 1,0/2,2->2,0
이런식.. 이렇게 보면 규칙을 찾기 힘든데 X좌표 증가하는 순으로 정렬해보면
2,0 -> 0,0 / 1,0 -> 0,1 / 0,0 -> 0,2 / 으로 x좌표는 최대 인덱스에서 시작 점점 줄어든다.
한 번 고쳐보자.
for(int i=0;i<N;i++) {
for(int j=0;j<N;j++) {
num[i][j] = arr[N-1-j][i];
}
}
요렇게 고쳤다 ~ 정말 간단 !
728x90
'알고리즘 > Samsung' 카테고리의 다른 글
SW 1946. 간단한 압축 풀기 (0) | 2023.05.02 |
---|---|
SW 1948. 날짜 계산기 (0) | 2023.05.02 |
SW 1983.조교의 성적 매기기 (1) | 2023.04.18 |
SW 2001. 파리퇴치 (0) | 2023.04.18 |
SW 2005. 파스칼의 삼각형 (0) | 2023.04.14 |