2025
01.11

 

원판, 기어 등 원형 데이터 기반 문제가 나오는 경우

인덱스를 마킹해서 모듈러 연산으로 풀거나

std::rotate 를 사용하여 푸는 방법이 있다.

 

std::rotate

<algorithm> 헤더에 선언되어있다.

배열, 벡터, 리스트 등에서 사용할 수 있다.

 

인자로는 시작점, 새로운 시작점, 끝점을 받는다.

 

왼쪽으로 n만큼 회전 

새로운 시작점(2번째 인자)을 begin에서 + n 해주자.

std::rotate(vec.begin(), vec.begin() + n, vec.end());

 

std::vector<int> vec = {1, 2, 3, 4, 5}; 
std::rotate(vec.begin(), vec.begin() + 2, vec.end());

// 이전 : 1 2 3 4 5
// 변경 : 3 4 5 1 2

 

오른쪽으로 n만큼 회전

새로운 시작점(2번째 인자)을 끝점에서 - n 만큼 지정해주자.

(begin에서 계산해서 사용해도 된다)

std::rotate(vec.begin(), vec.end() - n, vec.end());

 

std::vector<int> vec = {1, 2, 3, 4, 5}; 
std::rotate(vec.begin(), vec.end() - 2, vec.end());

// 이전 : 1 2 3 4 5
// 변경 : 4 5 1 2 3