본문 바로가기
C C++/C C++ 유용한 알고리즘 기법

[C/C++] 2차원 배열 90도 회전하기

by Go! Jake 2022. 10. 8.

2차원 배열 회전하기

2차원 배열을 90도 회전하는 것을 알아보도록 하겠음. 알고리즘 문제를 풀다 보면 배열로 여러 가지 변형을 줘야할 때가 있는 데, 그 중 하나가 회전임.

 

어려워 보이지만 실제로 그렇지 않음. 풀이 방법은 복잡한 공식 외우듯이 외우는 게 아니라 아래와 같이 단 하나의 행 또는 열로 회전한다고 생각하고 for문에서 일부 변형만 주면 나머지는 쉽게 구현 가능함.

2차원배열회전
2차원 배열 90도 회전

아래는 핵심 코드임.

행과 열을 살펴 보겠음. 

 

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;
}

댓글