개발에 AtoZ까지

[JAVA][D2] 1961. 숫자 배열 회전 본문

코딩테스트 준비/SWEA

[JAVA][D2] 1961. 숫자 배열 회전

AtoZ 개발자 2021. 1. 10. 14:08
반응형

문제 

N x N 행렬이 주어질 때,

시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.


[제약 사항]

N은 3 이상 7 이하이다.

[입력]

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

각 테스트 케이스의 첫 번째 줄에 N이 주어지고,

다음 N 줄에는 N x N 행렬이 주어진다.

[출력]

출력의 첫 줄은 '#t'로 시작하고,

다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.

입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예시

 

풀이

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

public class Solution {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		try {
			int T = Integer.parseInt(br.readLine());
			// 테스트케이스 반복
			for (int i = 1; i <= T; i++) {
				int N = Integer.parseInt(br.readLine());
				String[] str = new String[N];
				StringBuilder sb = new StringBuilder();
				for (int n = 0; n < N; n++) {
					StringTokenizer st = new StringTokenizer(br.readLine()," ");
					String temp="";
					//입력된 문자 공백제거 후 합치기
					while (st.hasMoreTokens()) {
						temp=temp+st.nextToken();
					}
					str[n]=temp;
				}
				for (int n = 0; n < N; n++) {
					sb.append(up(str, n,N) + " ");
					sb.append(left(str, n,N) + " ");
					sb.append(down(str, n,N) + "\n");
				}
				System.out.println("#" + i);
				System.out.print(sb.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	// 아래에서 위로방향
	private static String up(String[] str, int n,int N) {
		StringBuilder sb = new StringBuilder();
		for(int i=N-1;i>=0;i--) {
			sb.append(str[i].charAt(n));
		}
		return sb.toString();
	}

	// 오른쪽에서 왼쪽으로
	private static String left(String[] str, int n,int N) {
		StringBuilder sb = new StringBuilder();
		for(int i=N-1;i>=0;i--) {
			sb.append(str[N-n-1].charAt(i)) ;
		}
		return sb.toString();
	}

	// 위에서 아래방향
	private static String down(String[] str, int n,int N) {
		StringBuilder sb = new StringBuilder();
		for(int i=0;i<N;i++) {
			sb.append(str[i].charAt(N-n-1));
		}
		return sb.toString();
	}

}
반응형
Comments