SWEA 1961번
https://swexpertacademy.com/main/code/problem/problemDetail.do
N x N 행렬이 주어질 때,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
처음에 배열의 값을 직접 돌려서 복사한다고 구현하는 것 땜에 시간을 잡아먹었는데, 굳이 그럴 필요 없이 그냥 배열을 가로를 세로로 배치만 하면 되는 것이어서 생각보다 간단했다.
근데 출력이 조금 많이 까다로웠는데, 그냥 출력을 위한 String 2차원 배열을 만들어서 하니까 좀 수월했다.
for(int i=1; i<=3; i++) {
rotation(i); // 90도 단위로 회전, 90, 180, 270 총 3번 회전
make_ans(i-1);
}
90도 180도 270도로 총 3번의 rotation 메소드를 돌리고,
private static void rotation(int count) {
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) arr[j][(N-1)-i] = temp[i][j];
}
if(count==3) return;
copy();
} // End of rotation
rotation 메소드는 그냥 temp
의 배열의 가로값을 arr
의 세로에 복사하기 만하면 간단하게 해결
copy메소드는 처음에 복사된걸 감안해서 뒤에다 넣어주었고, copy가 마지막에 실행되지 않도록 하기 위해서 count
메소드를 통해 불필요한 실행을 방지했다.
private static void make_ans(int ansCount) {
for(int i=0; i<N; i++) {
StringBuilder temp = new StringBuilder();
for(int j=0; j<N; j++) temp.append(arr[i][j]);
ans[i][ansCount] = temp.toString();
}
} // End of make_ans
private static void result_build() {
for(int i=0; i<N; i++) {
for(int j=0; j<3; j++) sb.append(ans[i][j]).append(' ');
sb.append('\n');
}
} // End of result_build
make_ans와 result_build 는 결과를 만들어내는 메소드인데, make_ans에서는 rotation을 한번 실행한 회전한 배열을 출력하기위해 ans
로 복사하고, result_build는 모두 회전이 끝난후 sb
에 넣기 위한 ans
출력 메소드이다.
import java.util.*;
import java.io.*;
public class Solution {
static StringBuilder sb = new StringBuilder();
static int arr[][];
static int temp[][];
static String ans[][];
static int N;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for(int t=1; t<=T; t++) {
sb.append("#").append(t).append('\n');
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
temp = new int[N][N];
ans = new String[N][3];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) temp[i][j] = arr[i][j] = Integer.parseInt(st.nextToken());
}
for(int i=1; i<=3; i++) {
rotation(i); // 90도 단위로 회전, 90, 180, 270 총 3번 회전
make_ans(i-1);
}
result_build();
} // End of for(t)
bw.write(sb.toString()); bw.flush(); bw.close();
} // End of main
private static void rotation(int count) {
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) arr[j][(N-1)-i] = temp[i][j];
}
if(count==3) return;
copy();
} // End of rotation
private static void copy() {
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) temp[i][j] = arr[i][j];
}
} // End of copy
private static void make_ans(int ansCount) {
for(int i=0; i<N; i++) {
StringBuilder temp = new StringBuilder();
for(int j=0; j<N; j++) temp.append(arr[i][j]);
ans[i][ansCount] = temp.toString();
}
} // End of make_ans
private static void result_build() {
for(int i=0; i<N; i++) {
for(int j=0; j<3; j++) sb.append(ans[i][j]).append(' ');
sb.append('\n');
}
} // End of result_build
} // End of Main class
import java.io.*
import java.util.*
private val sb = StringBuilder()
private var N = 0
private lateinit var arr : Array<IntArray>
private lateinit var temp : Array<IntArray>
private lateinit var ans : Array<Array<String>>
fun main() {
val br = BufferedReader(InputStreamReader(System.`in`))
val bw = BufferedWriter(OutputStreamWriter(System.`out`))
var T = br.readLine().toInt()
for(t in 1..T) {
sb.append('#').append(t).append('\n')
N = br.readLine().toInt()
arr = Array(N){IntArray(N)}
temp = Array(N){IntArray(N)}
ans = Array(N){Array(3){""}}
for(i in 0 until N) {
var st = StringTokenizer(br.readLine())
for(j in 0 until N) {
val num = st.nextToken().toInt()
arr[i][j] = num; temp[i][j] = num
}
}
for(i in 1..3) {
rotation(i)
make_ans(i-1)
}
result_build()
}
bw.write(sb.toString()); bw.flush(); bw.close()
} // End of main
private fun rotation(count : Int) {
for(i in 0 until N) {
for(j in 0 until N) arr[j][(N-1)-i] = temp[i][j]
}
if(count.equals(3)) return
copy()
} // End of rotation
private fun copy() {
for(i in 0 until N) {
for(j in 0 until N) temp[i][j] = arr[i][j]
}
} // End of copy
private fun make_ans(ansCount : Int) {
for (i in 0 until N) {
val temp = StringBuilder()
for (j in 0 until N) temp.append(arr[i][j])
ans[i][ansCount] = temp.toString()
}
} // End of make_ans
private fun result_build() {
for(i in 0 until N) {
for(j in 0 until 3) sb.append(ans[i][j]).append(' ')
sb.append('\n')
}
} // End of result_build