코딩테스트/SWEA

[SWEA | Java] 1961번 숫자 배열 회전

박 성 하 2023. 12. 27. 17:43
728x90

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq

 

SW Expert Academy

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

swexpertacademy.com

티어

소요 시간

24분

분류

브루트포스

문자열

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int t = Integer.parseInt(br.readLine());
        for (int test = 1; test <= t; test++) {
            st = new StringTokenizer(br.readLine());
            int n = Integer.parseInt(st.nextToken());

            int[][] matrix = new int[n][n];
            for (int i = 0; i < n; i++) {
                st = new StringTokenizer(br.readLine(), " ");
                for (int j = 0; j < n; j++) {
                    matrix[i][j] = Integer.parseInt(st.nextToken());
                }
            }

            String[][] rotateMatrix = new String[n][3];
            for (int i = 0; i < n; i++) {
                StringBuilder num90 = new StringBuilder(), num180 = new StringBuilder(), num270 = new StringBuilder();
                for (int j = n - 1; j >= 0; j--) {
                    num90.append(matrix[j][i]);
                    num180.append(matrix[n - 1 - i][j]);
                    num270.append(matrix[n - j - 1][n - i - 1]);
                }
                rotateMatrix[i][0] = num90.toString();
                rotateMatrix[i][1] = num180.toString();
                rotateMatrix[i][2] = num270.toString();
            }

            System.out.println("#" + test);
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < 3; j++) {
                    System.out.print(rotateMatrix[i][j] + " ");
                }
                System.out.println();
            }
        }
    }
}

코드 설명

풀이가 여러 개 나올 수 있는 문제였다.

위 풀이 같은 경우 인덱스 계산을 해서 한 번의 반복으로 한번에 구해 배열로 저장한 케이스다.

직접 회전하는 경우 시간이 너무 비효율적이라고 생각했기 때문에 직접 회전을 하는 것이 아닌 인덱스를 계산해서 구했다.

 

사실 이 문제를 계속 틀렸는데 아직 그 이유는 못찾았다.

내 예상엔 int로 *10 + (숫자)를 하며 회전한 결과를 만들어갔는데 숫자가 단일 숫자가 아닐 경우 때문일 수도 있을 것 같다.

또한 output에서 1234라는 숫자가 있을 때 001234, 01234등 문자열처럼 처리가 되었기 때문에 문자열로 처리하니 정답이 되었다.

728x90