난이도 : D2
문제번호 : 1961
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
N x N 행렬이 주어질 때, |
제약사항
N은 3 이상 7 이하이다. |
입력
가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 번째 줄에 N이 주어지고, 다음 N 줄에는 N x N 행렬이 주어진다. |
출력
출력의 첫 줄은 '#t'로 시작하고, 다음 N줄에 걸쳐서 90도, 180도, 270도 회전한 모양을 출력한다. 입력과는 달리 출력에서는 회전한 모양 사이에만 공백이 존재함에 유의하라. (t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.) |
예시
입력 | 출력 |
2 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 |
2. 문제풀이
D2에서 어려웠던 문제였던거 같습니다. 출력이 왜저렇게 되는지 이해가 되지 않았거든요. 갑자기 741이 어디서 나온건지... 근데 나중에봤더니 90도 180도 270도 회전한걸 붙여서 출력한것이더라구요 이제 문제를 이해했으니 풀이를 했습니다.
먼저 배열을 회전하는 함수를 만들었습니다. 90도를 회전하는 함수입니다. 한번 회전할때마다 값을 저장하고 총 3번을 회전합니다. 배열을 회전하는 방식은 코드로 작성했으니 확인해보세요. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#include <iostream>
#include <vector>
#include <string>
using namespace std;
//배열회전함수
void spin_arr(int N, vector<vector<string>> &arr) {
vector<vector<string>> temp(N, vector<string>(N, ""));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
temp[i][j] = arr[abs(j - (N - 1))][i];
}
arr = temp;
}
int main() {
int len;
cin >> len;
//입력받은 횟수만큼 반복
for (int l = 1; l <= len; l++) {
int N, row = 0, cul = 0;
cin >> N;
//입력받은 배열과 결과배열
vector<vector<string>> arr(N, vector<string>(N, "")), result(N, vector<string>(N, ""));
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cin >> arr[i][j];
}
//배열은 총 3번 회전시킨다.
for (int l = 0; l < 3; l++) {
spin_arr(N, arr);
row = 0;
//회전시킨후 결과저장
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
result[row][cul] += arr[i][j];
row++;
}
cul++;
}
//출력
cout << "#" << l << endl;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cout << result[i][j] << " ";
cout << endl;
}
}
return 0;
}
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
날짜 계산기 C++(SW Expert Academy) (0) | 2020.02.12 |
---|---|
두 개의 숫자열 python,C++(SW Expert Academy) (0) | 2020.02.11 |
쉬운 거스름돈 C++(SW Expert Academy) (0) | 2020.02.09 |
스도쿠 검증 C++, Python(SW Expert Academy) (0) | 2020.02.08 |
시각 덧셈 C++(SW Expert Academy) (0) | 2020.02.07 |
댓글