2차원 배열 회전하기
2차원 배열을 90도 회전하는 것을 알아보도록 하겠음. 알고리즘 문제를 풀다 보면 배열로 여러 가지 변형을 줘야할 때가 있는 데, 그 중 하나가 회전임.
어려워 보이지만 실제로 그렇지 않음. 풀이 방법은 복잡한 공식 외우듯이 외우는 게 아니라 아래와 같이 단 하나의 행 또는 열로 회전한다고 생각하고 for문에서 일부 변형만 주면 나머지는 쉽게 구현 가능함.
아래는 핵심 코드임.
행과 열을 살펴 보겠음.
map[(MAX-1)-j)[i]를 살펴 보면, MAX-1이 행의 마지막 값이고, 이를 회전된 행렬 값에 갖다 붙임.그리고 MAX-1-j이므로 MAX-1-1, MAX-1-2, MAX-1-3, ...... 이런식으로 가면서 각각 갖다 붙이고 마지막은 0번 행도 갖다 붙임.
위 내용을 열마다 반복하면 되는 것임. 3 by 3 행렬로 해 보면 쉽게 이해할 수 있음.
void rotate()
{
for (int i=0; i<MAX; i++)
{
for (int j=0; j<MAX; j++)
{
map_rotate[i][j]=map[(MAX-1)-j][i];
}
}
}
소스코드
#include <iostream>
#include <vector>
#define MAX 3
using namespace std;
int map[MAX][MAX];
int map_rotate[MAX][MAX];
void input()
{
for (int i=0; i<MAX; i++)
{
for (int j=0; j<MAX; j++)
{
cin>>map[i][j];
}
}
}
void rotate()
{
for (int i=0; i<MAX; i++)
{
for (int j=0; j<MAX; j++)
{
map_rotate[i][j]=map[(MAX-1)-j][i];
}
}
}
void print()
{
for (int i=0; i<MAX; i++)
{
for (int j=0; j<MAX; j++)
{
cout<<map_rotate[i][j];
}
cout<<endl;
}
}
int main()
{
input();
rotate();
print();
return 0;
}
'C C++ > C C++ 유용한 알고리즘 기법' 카테고리의 다른 글
알고리즘 병합 정렬 완벽 이해하기 (0) | 2022.10.29 |
---|---|
[C/C++] 배열값 옮기기 (0) | 2022.10.15 |
[C/C++] 백준 11653번 소인수분해 (0) | 2022.10.04 |
[C/C++] 팩토리얼 구현하기 (재귀함수의 이해) (0) | 2022.09.29 |
[C/C++] 맵(좌표) 동서남북 알고리즘 문제 고찰 (0) | 2022.08.08 |
댓글