🌍 C++ Study/C++ 기초
C++ std::rotate 벡터 회전하기
맨텀
2025. 1. 11. 15:37
원판, 기어 등 원형 데이터 기반 문제가 나오는 경우
인덱스를 마킹해서 모듈러 연산으로 풀거나
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