https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq&categoryId=AV5Pq-OKAVYDFAUq&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

www.swexpertacademy.com

풀이

  1. 입력받은 배열을 처음에 90도 돌려서 새로운 배열에 저장해준다.
  2. 위에도 90도 돌린 배열을 다시 돌리면 180도가 되고 다시 이 배열을 돌리면 270도가 된다.
  3. 90도씩 회전하는 rotate함수
    1. 새로운 배열에 배열을 돌려서 저장한 후에 새로운 배열을 리턴한다.
    2. 90도를 돌리면 1행이 N열로, 2행이 N-1열로, ,,, , N행이 1열로 된다.
    3. 새로운 배열에서 N열부터 감소해가며 모든 열을 채워준다.
    4. 각 열에서는 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

+ Recent posts