study/C언어

[C언어] 2차원 배열 회전 알고리즘

IT공부 2019. 12. 17. 19:25
반응형

2차원 배열을 90도 단위씪 오른쪽으로 회전하며 이떄 4n번(360도) 회전하면 원 배열과 결과값이 같아진다 

 

그림 1-1

 

원 배열은 행과 열의 수가 같은 정방향 배열이라고 가정하고 하겠습니다. 

 

 

2차원 배열은 90도 단위로 회전하게 됩니다. 90도 , 180도, 270도, 360도 회전한 결과는 원 배열과 같으며 이후에는 

4개의 형태를 반복한다.  간단한 예제를 통해서 좀더 이해가 가도록 알아가 보도록 하겠습니다. 

 

- 90도 회전 

#include <stdio.h>
 
void array_rotate(){
    char A[5][5], B[5][5];
    int i,j;
    char alphabet='A';
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            A[i][j]=alphabet;
            alphabet++;
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",A[i][j]);
        }
        printf("\n");
    }
 
    printf("==================\n");
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            B[j][4-i]=A[i][j];
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",B[i][j]);
        }
        printf("\n");
    }
}
 
int main(void){
    array_rotate();
    return 0;
}

소스코드 부분에서 B[j][4-i] = A[i][j] 문으로 인하여 90도 회전된 B배열을 만들 수 있습니다. 

 

이 예제에서 알파벳이 회전을 하게 되면 어디 위치로 가는지 잘 생각해본다면 쉽게 이해가 가실 것 입니다. 

 

180도와 270도 회전은 따로 설명은 하지 않겠습니다. 

- 180도 회전 

#include <stdio.h>
 
void array_rotate(){
    char A[5][5], B[5][5];
    int i,j;
    char alphabet='A';
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            A[i][j]=alphabet;
            alphabet++;
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",A[i][j]);
        }
        printf("\n");
    }
 
    printf("==================\n");
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            B[4-i][4-j]=A[i][j];
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",B[i][j]);
        }
        printf("\n");
    }
}
 
int main(void){
    array_rotate();
    return 0;
}

 

 

- 270도 회전 

#include <stdio.h>
 
void array_rotate(){
    char A[5][5], B[5][5];
    int i,j;
    char alphabet='A';
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            A[i][j]=alphabet;
            alphabet++;
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",A[i][j]);
        }
        printf("\n");
    }
 
    printf("==================\n");
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            B[4-j][i]=A[i][j];
        }
    }
 
    for(i=0; i<5; i++){
        for(j=0; j<5; j++){
            printf("%c ",B[i][j]);
        }
        printf("\n");
    }
}
 
int main(void){
    array_rotate();
    return 0;
}

이렇게 이번 배열 회전 알고리즘을 마치겠습니다.

'study > C언어' 카테고리의 다른 글

[C언어] 주석처리  (0) 2019.12.20
[C언어] 1. HelloWorld  (0) 2019.12.20
[C언어] 테트리스  (0) 2019.12.20
다차원 배열(2차원 배열, 3차원 배열)  (0) 2019.12.17
C언어로 야구게임 만들기  (0) 2019.12.16