습관처럼

C++ - 1차원 배열에서의 시계방향, 반시계 방향 (feat: rotate) 본문

Language/C++

C++ - 1차원 배열에서의 시계방향, 반시계 방향 (feat: rotate)

dev.wookii 2020. 5. 1. 00:01

여러 알고리즘 문제를 풀때 1차원 배열에서 시계 방향, 반시계 방향으로 회전을 시켜야 하는 경우가 존재합니다. 이때 정말 쉽고 편리하게 사용할 수 있는 방법을 알려드리도록 하겠습니다.

 

먼저 Algorithm 헤더의 rotate에 대해 잘 모르시다면 아래 링크를 통해 rotate에 대해 보고오시면 쉽게 이해할수 있습니다. 

 

참고: 2020/04/13 - [Language/C++] - C++ - Algorithm 헤더 파일 reverse(), rotate(), random_shuffle()

관련 문제2020/04/30 - [Algorithms/BOJ] - 백준 14891 - 톱니바퀴

 

시계를 예로 들어보도록 하겠습니다~. 1시부터 12까지 숫자가 존재한다고 가정하겠습니다. 

#include <iostream>
#inlcude <algorithm>

using namespace std;

int clock[12]={1,2,3,4,5,6,7,8,9,10,11,12};
int main(){
	//반시계방향
	rotate(clock, clock+1, clock+12);
	//시계방향
	rotate(clock, clock+11, clock+12);
	return 0;
}

위의 코드를 공식으로 정리하면, 반시계는 어레이가 앞으로 한칸씩 가기때문에 (clock+1)을 합니다. 시계방향은 이와 다르게 (clock + (전체 크기-1))만큼 진행합니다. 

 

반시계 방향으로 n 만큼 이동 : rotate(clock, clock + n, clock+ (arr.size()) )

시계 방향으로 n 만큼 이동 : rotate(clock, clock+ (arr.size() - n), clock + (arr.size()) )