N x N 행렬이 주어질 때,
시계 방향으로 90도, 180도, 270도 회전한 모양을 출력하라.
[제약 사항]
N은 3 이상 7 이하이다.
[입력]
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에 N이 주어지고,
다음 N 줄에는 N x N 행렬이 주어진다.
[출력]
출력의 첫 줄은 '#t'로 시작하고,
다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다.
입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)
입력10
3
1 2 3
4 5 6
7 8 9
6
6 9 4 7 0 5
8 9 9 2 6 5
6 8 5 4 9 8
2 2 7 7 8 4
7 5 1 9 7 9
8 9 3 9 7 6
…
3
1 2 3
4 5 6
7 8 9
6
6 9 4 7 0 5
8 9 9 2 6 5
6 8 5 4 9 8
2 2 7 7 8 4
7 5 1 9 7 9
8 9 3 9 7 6
…
출력#1
741 987 369
852 654 258
963 321 147
#2
872686 679398 558496
952899 979157 069877
317594 487722 724799
997427 894586 495713
778960 562998 998259
694855 507496 686278
…
741 987 369
852 654 258
963 321 147
#2
872686 679398 558496
952899 979157 069877
317594 487722 724799
997427 894586 495713
778960 562998 998259
694855 507496 686278
…
• 풀이
별찍기 느낌으로 열심히 돌린후 한번에 출력하면 좋겠지만 출력값이 까다로웠다
n * n 크기로 입력받으면 출력은 n줄이 되기에 string n개를 만들어주고
2중 for문으로 순회할때 바깥쪽 for문 i에 해당하는 string[i] 에 내부 for문에서 나온 숫자 n개와 스페이스를 추가하는 식으로
입력을 저장해두고
마지막에 출력하는 형식으로 풀었다
#include <iostream>
#include <vector>
using namespace std;
int main () {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int test_case;
cin >> test_case;
for(int t = 1; t <= test_case; t++){
int n;
cin >> n;
vector<vector<int>> arr(n,vector<int> (n,0));
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
int tmp;
cin >> tmp;
arr[i][j] = tmp;
}
}
vector<string> res(n,"");
int cnt = 0;
for(int i = n - 1; i >= 0; i--){
string temp = "";
for(int j = n-1; j >= 0; j--){
temp += to_string(arr[j][n-i-1]);
}
cnt %= n;
res[cnt++] += temp += " ";
}
cnt = 0;
for(int i = n - 1; i >= 0; i--){
string temp = "";
for(int j = n-1; j >= 0; j--){
temp += to_string(arr[i][j]);
}
cnt %= n;
res[cnt++] += temp += " ";
}
cnt = 0;
for(int i = n-1; i >= 0; i--){
string temp = "";
for(int j = n-1; j >= 0; j--){
temp += to_string(arr[n-j-1][i]);
}
cnt %= n;
res[cnt++] += temp += " ";
}
cout << "#" << t << '\n';
for(string x : res){
cout << x << '\n';
}
}
}
- -채찍피티 코드
굳이 2중 for문 3개를 쓸 필요없이 하나 안에서 처리해서 훨씬 깔끔해보인다
#include <iostream>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int test_case;
cin >> test_case;
for (int t = 1; t <= test_case; t++) {
int n;
cin >> n;
vector<vector<int>> arr(n, vector<int>(n, 0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> arr[i][j];
}
}
cout << "#" << t << '\n';
// 한 번의 루프에서 90도, 180도, 270도 회전값을 한꺼번에 구함
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// 90도 회전: arr[n-j-1][i]
cout << arr[n - j - 1][i];
}
cout << " ";
for (int j = 0; j < n; j++) {
// 180도 회전: arr[n-i-1][n-j-1]
cout << arr[n - i - 1][n - j - 1];
}
cout << " ";
for (int j = 0; j < n; j++) {
// 270도 회전: arr[j][n-i-1]
cout << arr[j][n - i - 1];
}
cout << '\n';
}
}
}
'C++ 알고리즘' 카테고리의 다른 글
1288. 새로운 불면증 치료법 D2 (1) | 2024.10.12 |
---|---|
SWEA D2 1959. 두 개의 숫자열 (0) | 2024.10.12 |
SWEA D2 2005 파스칼의 삼각형 (0) | 2024.10.11 |
SWEA D2 1926 간단한 369 (0) | 2024.10.10 |
SWEA D2 1954 달팽이 숫자 (0) | 2024.10.10 |