풀이
16926 | 맞았습니다!! | 2696 | 100 | C++14 / 수정 | 2001 |
1) 배열의 가장 바깥쪽 -> 안쪽-> 안쪽으로 계속 반복되어야 하기 때문에 cnt를 (가로, 세로 중 작은수)/2 로 정한다.
2) 배열을 돌릴 횟수 (r) 과 한 번 돌릴 때 반복되어야 하는 횟수 (cnt)를 파라미터로 받는 함수 rotate 정의
3) rotate에서 tmp는 처음 만나는 값을 저장한다.
이 배열이 주어졌을 때 배열의 가장 바깥쪽에서 가장 먼저 만나는 값은 1 이므로 tmp는 1을 저장한다.
1이 저장 되어야 하는 방향은 위-> 아래이므로 가장 먼저 위-> 아래로 가는 방향으로 돌린다.
- 위 아래 방향이 끝났을 때 tmp에는 13 이라는 값이 저장되어있다. 13이라는 방향이 다음에 가야할 방향은 -> 이므로 왼쪽에서 오른쪽으로 이동한다.
- -> 방향이 끝나면 tmp에는 16이 저장되어있다. 그러면 아래 위 방향으로 회전한다.
- 아래 위 방향이 끝나면 tmp == 4 이므로 마지막으로 <- 을 회전한다.
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int n, m; //r은 회전수
int matrix[301][301], c_matrix[301][301];
void rotate(int cnt, int r){
while(r--) {
for (int i = 0; i < cnt; i++)
{
int tmp = c_matrix[i][i]; //제일 먼저 만나는 수를 저장
// cout << tmp << '\n';
//V
for (int j = i+1; j < n-i; j++)
{
int tmp2 = c_matrix[j][i];
c_matrix[j][i] = tmp;
tmp = tmp2;
}
//->
for (int j = i; j < m-i-1; j++) {
int tmp2 = c_matrix[n-i-1][j+1];
c_matrix[n-i-1][j+1] = tmp;
tmp = tmp2;
}
//^
for (int j = n-i-1; j > i; j--) {
int tmp2 = c_matrix[j-1][m-i-1];
c_matrix[j-1][m-i-1] = tmp;
tmp = tmp2;
}
//<-
for (int j = m-i-1; j > i; j--) {
int tmp2 = c_matrix[i][j-1];
c_matrix[i][j-1] = tmp;
tmp = tmp2;
}
}
}
}
void printMap()
{
cout << '\n';
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << c_matrix[i][j] << " ";
}
cout << '\n';
}
cout << '\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
int r;
cin >> n >> m >> r;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> matrix[i][j];
c_matrix[i][j] = matrix[i][j];
}
}
//input
//반시계방향회전
//오른쪽->왼쪽 , 위-> 아래 , 왼쪽->오른쪽, 아래->위쪽
int cnt = min(n, m)/2;
rotate(cnt, r);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << c_matrix[i][j] << " ";
}
cout << '\n';
}
return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'BOJ > C++' 카테고리의 다른 글
[BOJ] 17144. 미세먼지 안녕! (0) | 2019.09.26 |
---|---|
[BOJ] 게리맨더링 (2) | 2019.09.22 |
[BOJ] 불 (0) | 2019.09.17 |
[BOJ] 아맞다우산 (0) | 2019.09.10 |
[BOJ] Maaaaaaaaaze (0) | 2019.09.08 |