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

U·2023년 7월 10일

SWEA

목록 보기
3/10

문제

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도 회전한 배열을 각각 구한 뒤, 출력하려고 했다. 근데 출력 양식을 보고 도저히 세 배열을 동시에 출력할 방법을 생각하지 못했다. 그래서 [N][3 * N] 크기의 배열을 새로 만들어 이 안에서 각각 90도, 180도, 270도를 구한 뒤, 한번에 출력하는 방식을 택했다. 근데 이게 맞나 😅

👀 풀이

import java.util.Scanner;
import java.io.FileInputStream;

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();
			int arr[][] = new int[N][N];
			
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < N; j++) {
					arr[i][j] = sc.nextInt();
				}
			}
			
			int newArr[][] = new int[N][3 * N];
			int k = N - 1;
			
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < 3 * N; j++) {
					if (j % N == 0) {
						k = N - 1;
					}
					if (j < N) {
						newArr[i][j] = arr[k][i];
						k--;
					}
					else if (j < 2 * N) {
						newArr[i][j] = arr[N - 1 - i][k];
						k--;
					}
					else {
						newArr[i][j] = arr[k - N + 1][N - 1 - i];
						k++;
					}
				}
			}
			
			System.out.println("#" + test_case);
			
			for (int i = 0; i < N; i++) {
				for (int j = 0; j < 3 * N; j++) {
					if (j % N == N - 1) {
						System.out.print(newArr[i][j] + " ");
					}
					else {
						System.out.print(newArr[i][j]);
					}
				}
				System.out.println();
			}
		}
	}
}
profile
백엔드 개발자 연습생

0개의 댓글