90도 회전하는 과정
1(00) -> 7(20)
2(01) -> 4(10)
3(02) -> 1(00)
4(10) -> 8(21)
5(11) -> 5(11)
6(12) -> 2(01)
이제 규칙이 보인다.
i는 N-1부터 감소하고 j는 i의 값을 가진다.
복사를 위해 입력받은 배열과 크기가 같은 배열 하나를 준비하여 그곳에 입력받은 배열을 회전한 값을 넣는다. 이 과정을 3번 반복한다.
주의할 점은 입력받은 배열은 90도 돌린 값으로 초기화해줘야 한다.
출력은 새로운 string배열을 만든다.
string 행에 90도 돌린 행들을 모두 합치는 형태로 해야 한다.
예를 들어
string 1행은 741 즉, [0][0] = 741, [1][0] = 852, [2][0] = 963이 된다.
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <cstdio>
#include <math.h>
using namespace std;
int tc, T, N;
int main() {
cin >> T;
for (tc = 1; tc <= T; tc++) {
cin >> N;
int arr[8][8];
int copy_arr[8][8];
string answer[8][8] = { "", };
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> arr[i][j];
}
}
for (int r = 0; r < 3; r++) { // 90, 180, 270 이기 때문에 총 3번 회전
for (int i = 0; i < N; i++) {
for (int j = 0, k = N - 1; j < N, k >= 0; j++, k--) {
copy_arr[i][j] = arr[k][i]; // 90도 회전
}
}
copy(©_arr[0][0], ©_arr[0][0] + 8 * 8, &arr[0][0]); // arr에 copy_arr을 deep copy
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
answer[i][r] += to_string(copy_arr[i][j]);
}
}
}
cout << "#" << tc << "\n";
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << answer[i][j] << " ";
}
cout << "\n";
}
}
return 0;
}