본문 바로가기
알고리즘/SWEA

[SWEA / 숫자 배열 회전 / JAVA]

by KDW999 2023. 5. 1.

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

 

SW Expert Academy

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

swexpertacademy.com

 

문제 접근

 

90도 씩 배열을 돌리면 되는 구조

그런데 머릿속으로만 생각하려니 전체적인 구조가 확 잡히지 않았다.

다른 사람 풀이를 봐도 이해가 안되서 직접 그려서 90도 씩 돌렸을 때 구조를 보았다.

 

N이 3일 때 Original 배열과 90도 돌아간 배열을 비교해보면

     90도 배열             Original 배열

  [0,0] [0,1] [0,2]       [2,0] [1,0] [0,0]

  [1,0] [1,1] [1,2]       [2,1] [1,1] [0,1]

  [2,0] [2,1] [2,2]       [2,2] [1,2] [0,2]

 

90도 배열의 자리에 해당 Original 배열의 값들이 들어가면 된다.

구조를 보면 90도 배열에서 첫 줄부터 값을 넣을 때 Original 배열에선 [i][j] 중 j는 값이 고정되고 앞의 i값이 변화한다.

그 다음 줄도 마찬가지다.

이 규칙을 배열의 크기와 이중 for문의 크기로 적용한다.

90도는 Original을 토대로 180도는 90도를 토대로 270도는 180도를 토대로 만들면 된다.

 

이후 계산된 배열들을 한 줄 씩 출력

 

++ 이해 안되면 손으로 적어가면서라도 이해해보자

import java.util.*;
import java.io.*;

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 t=0; t<T; t++) {
			N = Integer.parseInt(br.readLine()); // 맵 가로 세로
			
			int[][] arr = new int[N][N];
			
			for(int i=0; i<N; i++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				for(int j=0; j<N; j++) arr[i][j] = Integer.parseInt(st.nextToken());
			}
			
			// 이전 모양의 배열을 90도씩 돌리기
			int[][] arr90 = rotation(arr);
			int[][] arr180 = rotation(arr90);
			int[][] arr270 = rotation(arr180);
			
            System.out.println("#"+(t+1));
			for(int i=0; i<N; i++) {
				// 출력해야할 건 90도, 180도, 270도 세 개뿐
				for(int j=0; j<N; j++)	System.out.print(arr90[i][j]);
				System.out.print(" ");
				
				for(int j=0; j<N; j++) 	System.out.print(arr180[i][j]);
				System.out.print(" ");
				
				for(int j=0; j<N; j++) 	System.out.print(arr270[i][j]);
				
				System.out.println("");
			}
		}
	 } 
	
	// 회전 계산 메서드
	public static int[][] rotation(int[][] beforeArr){
		
		int[][] resultArr = new int[N][N];
		
		for(int i=0; i<N; i++) {
			for(int j=0; j<N; j++) {
				resultArr[i][j] = beforeArr[beforeArr.length-1-j][i];
			}
		}
		
		return resultArr;
	}
}

'알고리즘 > SWEA' 카테고리의 다른 글

[SWEA / 날짜 계산기 / JAVA]  (1) 2023.05.03
[SWEA / 두 개의 숫자열 / JAVA]  (0) 2023.05.02
[SWEA / 수도 요금 경쟁 / JAVA]  (0) 2023.05.01
[SWEA / 숫자를 정렬하자 / JAVA]  (0) 2023.04.29
[SWEA / 쉬운 거스름돈 / JAVA]  (0) 2023.04.28

댓글