본문 바로가기

BOJ/C++

[BOJ] 배열 돌리기1

풀이

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