티스토리 뷰


SWEA #1961 숫자 배열 회전 

 

SW Expert Academy

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

swexpertacademy.com

🔒 문제 설명

N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.

[제약 사항]
N은 3 이상 7 이하이다.

⌨️ 입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고, 다음 N 줄에는 N x N 행렬이 주어진다.

🖥️ 출력

출력의 첫 줄은 '#t'로 시작하고, 다음 N 줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 


 

풀이 방법은 크게 두 가지로 나뉠 것 같다. [1] 규칙을 찾아서 하나씩 출력하거나 [2] 직접 세 개의 박스를 구현해서 출력하거나. 나 같은 경우는 두 번째 방법을 선택했다. [1] 번의 방법의 경우 규칙 자체는 쉽게 찾아지지만 이를 출력하기 위해 for문과 인덱스를 설정하는 것이 너무 복잡할 것 같아서 [2] 번을 채택했다. 

 

🗝️ Solution

import java.util.ArrayList;
import java.util.Scanner;
class Solution {

    public static void main(String args[]) throws Exception
    {
        Scanner sc = new Scanner(System.in);
        int T;
        T=sc.nextInt();

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = sc.nextInt();

            // input_box = 입력 받은 오리지널 박스
            ArrayList<ArrayList<Integer>> input_box = new ArrayList<>();

            // first_box = 90도 돌린 박스
            ArrayList<ArrayList<Integer>> first_box = new ArrayList<>();

            // second_box = 180도 돌린 박스
            ArrayList<ArrayList<Integer>> second_box = new ArrayList<>();

            // third_box = 270도 돌린 박스
            ArrayList<ArrayList<Integer>> third_box = new ArrayList<>();


            // [1] 입력 받아서 input_box 채우기
            for(int i = 0; i < N; i++){
                ArrayList<Integer> row = new ArrayList<>();

                for(int j = 0; j < N; j++){
                    int n = sc.nextInt();
                    row.add(n);
                }
                input_box.add(row);
            }


            // [2] input_box를 90도 회전 시킨 first_box 채우기
            for(int i = 0; i < N; i++){
                ArrayList<Integer> row = new ArrayList<>();

                for(int j = N-1 ; j > -1; j-- ){
                    row.add(input_box.get(j).get(i));
                }

                first_box.add(row);
            }

            
            // [3] fisrt_box를 90도 회전 시킨 second_box 채우기
            for(int i = 0; i < N; i++){
                ArrayList<Integer> row = new ArrayList<>();

                for(int j = N-1 ; j > -1; j-- ){
                    row.add(first_box.get(j).get(i));
                }

                second_box.add(row);
            }

            
            // [4] second_box를 90도 회전 시킨 third_box 채우기
            for(int i = 0; i < N; i++){
                ArrayList<Integer> row = new ArrayList<>();

                for(int j = N-1 ; j > -1; j-- ){
                    row.add(second_box.get(j).get(i));
                }

                third_box.add(row);
            }

            
            //[5] 출력
            System.out.println("#" + test_case);
            for(int j = 0; j < N ; j++){
                
                for(int n : first_box.get(j)){
                    System.out.print(n);
                }
                System.out.print(" ");

                for(int n : second_box.get(j)){
                    System.out.print(n);
                }
                System.out.print(" ");

                for(int n : third_box.get(j)){
                    System.out.print(n);
                }
                System.out.println();
            }
        }
    }
}

 

입력받은 박스를 그대로 저장하는 input_box, 90도 회전시킨 first_box, 180도 회전시킨 second_box 그리고 마지막 270도 회전시킨 third_box까지. 각 박스들은 2차원 배열 Array_list를 사용해서 구현했다.

C++에 익숙해서 Java에서도 항상 Vector를 사용했었는데 공부를 하다 보니 Array_list가 Vector와 거의 흡사한데 더 빠르다고 해서 앞으로는 Array_List를 사용할 예정이다. 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/09   »
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
글 보관함