[SWEA-D2][숫자 배열 회전][JAVA]

Boknami·2023년 10월 15일

SWEA

목록 보기
4/14

🕐 풀이시간 : 1시간 이상

🤔 어려웠던 점

할 게 많아서 좀 복잡했다.
90도 돌린 배열에 값을 기록해두면서 배열 자체도 뒤짚는 과정을 계속해야했는데
내가 다른 풀이들과 접근방법이 많이 달랐다.

 //1.회전하고 값 넣기
int sum = 0;
int idx= 0;
for(int i = 0; i < size; i++){
 	  for(int j = size-1; j >= 0; j--){
       	  sum += board[j][i] * (10*j);
          temp[i][Math.abs(j -size)] = board[j][i];
      }
    sum += board[0][i];
    newBoard[idx][cycle] = sum;
    idx++;
}

나는 배열을 세로로 계산해나가며 해당 번째 인덱스에 맞게 곱셈 연산은 하여 주려고 했다.
예를 들어

1 2 3        741
4 5 6    -> 
7 8 9  

741을 구하기 위해서는 700 + 40 +1 로 생각을 하고 풀었는데 다른 풀이들은 그냥 회전을 하고나서 출력을 해주는 형식으로 풀었다. 당연하게 이런 식으로 풀려고 했는데 뭔가 띵했다.

7 4 1
8 5 2 
9 6 3

이렇게 뒤짚힌 숫자를 3개 가지고 그 3개를 이용해서 출력하는 것이 가장 적절한 풀이이다!


💬 회고

어떻게 푸는 지 느낌을 보고 한 번 풀어보려고 했는데 잘 안되었다.
회전을 한다는 것을 구현하는 것은 주석으로 하나씩 적어보면서 식을 구했는데(이것도 인덱스 실수로 한 번 크게 잘못 구함) 돌리고 출력하는 과정까지 머리가 막 꼬인다.
이런 류의 문제들에 스스로가 약함을 다시 한 번 느끼고 이런 문제들은 다시 한 번 풀어봐야한다.


💻 코드

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 =sc.nextInt();
		for(int test_case = 1; test_case <= T; test_case++)
		{
			System.out.println("#" + test_case);
            int size = sc.nextInt();
            int[][] board = new int[size][size];

            //입력받기
            for(int i = 0; i < size; i++){
                for(int j = 0 ; j < size; j++){
                    board[i][j] =  sc.nextInt();
                }
            }
            
            //회전한 값들 구하기
            int[][] board90 = Rotation90(board);
            int[][] board180 = Rotation90(board90);
            int[][] board270 = Rotation90(board180);
            
            
            for(int j=0; j<size; j++) {
                for(int k=0; k<size; k++) {
                    System.out.print(board90[j][k]);
                }
                System.out.print(" ");

                for(int k=0; k<size; k++) {
                    System.out.print(board180[j][k]);
                }
                System.out.print(" ");

                for(int k=0; k<size; k++) {
                    System.out.print(board270[j][k]);
                }
                System.out.println();
            }
		}
	}
    
    public static int[][] Rotation90(int[][] board){
     	int[][] returnBoard = new int[board[0].length][board.length];
        for(int i = 0;  i < board.length; i++){
            for(int j = 0 ; j < board.length; j++){
                returnBoard[i][j] = board[board.length-1-j][i];
            }
        }
        return returnBoard;
    }
}

0개의 댓글