코딩 공부/백준

[백준][C++] 16926 배열 돌리기 1

김 정 환 2021. 2. 11. 19:48
반응형

 

 

 

알고리즘 종류

    - 회전

 

 

사고 과정

    1. 회전 횟수만큼 while을 반복한다.

    2. 4개의 꼭지점을 찾고, 꼭지점이 사각형을 이룰 때까지 while을 반복한다.

    3. 4개의 변에서 값을 시계방향으로 한 칸씩 이동시킨다.

 

 

 

구현(C++)

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
#include <iostream>
#include <vector>
 
using namespace std;
 
int n, m, r;
int mat[301][301];
 
void print(){
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            cout << mat[i][j] << " ";
        }
        cout << endl;
    }
 
int main(void){
    
    cin >> n >> m >> r;
    
    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
            cin >> mat[i][j];
    
    // 회전 횟수  
    while(r--){                                                                 
        // 각 꼭지점 위치  
        int y1 = 0;
        int x1 = 0;
        
        int y2 = n-1;
        int x2 = 0;
        
        int y3 = n-1;
        int x3 = m-1;
        
        int y4 = 0;
        int x4 = m-1;
        
        // 회전할 범위가 가용할 때까지, 
        while( (y1 < y2) && (x1 < x4) ){
            int tmp = mat[y1][x1];
            // 위쪽 변  
            for(int j=x1; j<x4; j++){
                mat[y1][j] = mat[y1][j+1];
            }
 
            // 오른쪽 변
            for(int i=y4; i<y3; i++){
                mat[i][x4] = mat[i+1][x4];
            }
 
            // 아래쪽 변
            for(int j=x3; j>x2; j--){
                mat[y3][j] = mat[y3][j-1];
            }
 
            // 왼쪽 변 
            for(int i=y2; i>y1; i--){
                mat[i][x2] = mat[i-1][x2];
            }
            
            mat[y1+1][x1] = tmp;
            
            // 안쪽 사각형  
            y1 += 1;
            x1 += 1;
            
            y2 -= 1;
            x2 += 1;
            
            y3 -= 1;
            x3 -= 1;
            
            y4 += 1;
            x4 -= 1;
        }
    }
    
    print();
}
cs

 

 

 

시행착오

    - 회전류의 문제는 나를 혼란스럽게 하는 문제이다. 아직 나만의 풀이 방법을 적립하지 못했기 때문이라고 생각한다. 그래서 방향, 이동 거리, 회전 횟수 등과 같은 조건들을 알고리즘으로 아직 설계하지 못하고 있다. 가장 큰 이유는 문제를 적게 풀어봤기 때문이라고 생각한다. 이 배열 돌리기 문제는 시리즈로 구성되어 있으니 모두 풀어보자.

 

반응형