티스토리 뷰

문제

이미지를 표현하는 N x N 행렬이 있다. 이미지의 각 픽셀은 4바이트로 표현된다. 이때 이미지를 90도 회전시키는 메서드를 작성하라. 부가적인 행렬을 사용하지 않고서도 할 수 있겠는가?

 

풀이

배열의 가장 바깥쪽 레이어 부터 값을 90도 이동시키고 안쪽 레이어까지 반복해주면 됩니다.

 

 

구현 코드

 

#include <vector>
using namespace std;
void rotate(vector<vector<int>>& matrix, int n){
//가장 바깥쪽 레이어부터 안쪽 레이어까지 반복한다.
for(int layer=0;layer<n/2;++layer){
int first = layer;
int last = n - 1 - layer;
//현재 레이어의 모서리부터 회전하고 한칸씩 이동한다.
for(int i=first;i<last;++i){
int offset = i - first;
int top = matrix[first][i];
matrix[first][i] = matrix[last - offset][first]; //왼쪽 아래 -> 왼쪽 위
matrix[last - offset][first] = matrix[last][last - offset]; //오른쪽 아래 -> 왼쪽 아래
matrix[last][last - offset] = matrix[i][last]; //오른쪽 위 -> 왼쪽 아래
matrix[i][last] = top; //왼쪽 위 -> 오른쪽 위
}
}
}