티스토리 뷰
[JAVA] SW Expert Academy #1961 숫자 배열 회전 풀이 | ArrayList | 2차원 배열
YouJungJang 2023. 11. 16. 19:29SWEA #1961 숫자 배열 회전
🔒 문제 설명
N x N 행렬이 주어질 때, 시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
⌨️ 입력
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고, 다음 N 줄에는 N x N 행렬이 주어진다.
🖥️ 출력
출력의 첫 줄은 '#t'로 시작하고, 다음 N 줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
풀이 방법은 크게 두 가지로 나뉠 것 같다. [1] 규칙을 찾아서 하나씩 출력하거나 [2] 직접 세 개의 박스를 구현해서 출력하거나. 나 같은 경우는 두 번째 방법을 선택했다. [1] 번의 방법의 경우 규칙 자체는 쉽게 찾아지지만 이를 출력하기 위해 for문과 인덱스를 설정하는 것이 너무 복잡할 것 같아서 [2] 번을 채택했다.
🗝️ Solution
import java.util.ArrayList;
import java.util.Scanner;
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();
// input_box = 입력 받은 오리지널 박스
ArrayList<ArrayList<Integer>> input_box = new ArrayList<>();
// first_box = 90도 돌린 박스
ArrayList<ArrayList<Integer>> first_box = new ArrayList<>();
// second_box = 180도 돌린 박스
ArrayList<ArrayList<Integer>> second_box = new ArrayList<>();
// third_box = 270도 돌린 박스
ArrayList<ArrayList<Integer>> third_box = new ArrayList<>();
// [1] 입력 받아서 input_box 채우기
for(int i = 0; i < N; i++){
ArrayList<Integer> row = new ArrayList<>();
for(int j = 0; j < N; j++){
int n = sc.nextInt();
row.add(n);
}
input_box.add(row);
}
// [2] input_box를 90도 회전 시킨 first_box 채우기
for(int i = 0; i < N; i++){
ArrayList<Integer> row = new ArrayList<>();
for(int j = N-1 ; j > -1; j-- ){
row.add(input_box.get(j).get(i));
}
first_box.add(row);
}
// [3] fisrt_box를 90도 회전 시킨 second_box 채우기
for(int i = 0; i < N; i++){
ArrayList<Integer> row = new ArrayList<>();
for(int j = N-1 ; j > -1; j-- ){
row.add(first_box.get(j).get(i));
}
second_box.add(row);
}
// [4] second_box를 90도 회전 시킨 third_box 채우기
for(int i = 0; i < N; i++){
ArrayList<Integer> row = new ArrayList<>();
for(int j = N-1 ; j > -1; j-- ){
row.add(second_box.get(j).get(i));
}
third_box.add(row);
}
//[5] 출력
System.out.println("#" + test_case);
for(int j = 0; j < N ; j++){
for(int n : first_box.get(j)){
System.out.print(n);
}
System.out.print(" ");
for(int n : second_box.get(j)){
System.out.print(n);
}
System.out.print(" ");
for(int n : third_box.get(j)){
System.out.print(n);
}
System.out.println();
}
}
}
}
입력받은 박스를 그대로 저장하는 input_box, 90도 회전시킨 first_box, 180도 회전시킨 second_box 그리고 마지막 270도 회전시킨 third_box까지. 각 박스들은 2차원 배열 Array_list를 사용해서 구현했다.
C++에 익숙해서 Java에서도 항상 Vector를 사용했었는데 공부를 하다 보니 Array_list가 Vector와 거의 흡사한데 더 빠르다고 해서 앞으로는 Array_List를 사용할 예정이다.
'Study > JAVA' 카테고리의 다른 글
[JAVA] 백준 #5582 공통 부분 문자열 문제 풀이 | Dynamic Programming | 2차원 배열 (1) | 2023.11.17 |
---|---|
[JAVA] SW Expert Academy #2001 파리 퇴치 문제 풀이 | ArrayList | 완전 탐색 (0) | 2023.11.16 |
[JAVA] SW Expert Academy #18662 등차수열 만들기 문제 풀이 (0) | 2023.11.16 |
[JAVA] 백준 #4358 생태학 문제 풀이 | HashMap | TreeMap | Buffered Reader (0) | 2023.11.16 |
[JAVA] 문자열을 쉽고 능숙하게 다루는 방법 / String to Integer 쉽게 하는 방법 ParseInt / SubString (2) | 2023.11.03 |