https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5Pq-OKAVYDFAUq
문제 접근
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 |
댓글