본문 바로가기
[알고리즘 + 자료구조]

C++ 2차원 배열 회전하기

by Hevton 2022. 10. 6.
반응형

 

이런 방법을 깨닫게 되다니.. 써먹을 일이 많을 것 같다.

 

 

이론에 대한 자세한 방식은, 아래 블로그에서 너무나도 잘 설명해 주고 있다!

https://taaewoo.tistory.com/10#memmove-%--%EB%B-%B-%EC%--%B-%--A%--%EC%-B%-C%EC%-E%--%--%EC%A-%BC%EC%--%-C%-C%--%EB%B-%B-%EC%--%B-%--B%--%EC%-B%-C%EC%-E%--%--%EC%A-%BC%EC%--%-C%-C%--%ED%--%AC%EA%B-%B-%---

 

 

위 블로그에서는, 시계방향 90도 회전을 다루고 있는데

 

나는 이를 토대로 반시계방향 90도에 대해서 구현해 보았다.

 

 

 

5 x 5의 A배열을, 반시계방향으로 90도 회전시킨 B배열을 얻고 싶을때

 

A배열의 1행만 생각해보면 된다.

 

A배열의 1행 부분인 (0, 0) (0, 1) (0, 2) (0, 3) (0, 4) 이 90도 회전되었을 때 

B배열의 (4, 0) (3, 0) (2, 0) (1, 0) (0 ,0) 으로 가게 된다.

 

이를 토대로 식을 세울 수 있다.

B[B_row][B_col] = A[B_col][4 - B_row - 1]

 

코드는 이렇게 된다.

// 반시계방향 90도 회전
void rotate() {
    
    
    double tmp[5][5];
    
    for(int i = 0; i < 5; i++) {
        
        for(int j = 0; j < 5; j++) {
            
            
            tmp[i][j] = f[j][5 - i - 1];
            
        }
    }
    
    
    memmove(f, tmp, sizeof(f)); // dest, src, size
    
}

memmove(dest, src, size) 를 통해서 배열을 복사할 수 있다. memmove함수는 <cstring> 헤더에 포함되어 있다.

 

 

 

반응형