원판, 기어 등 원형 데이터 기반 문제가 나오는 경우
인덱스를 마킹해서 모듈러 연산으로 풀거나
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
'🌍 C++ Study > C++ 기초' 카테고리의 다른 글
C++ std::unique 중복 요소 제거 (0) | 2024.11.26 |
---|---|
C++ string 공백으로 자르기 split stringstream (0) | 2024.11.25 |
C++ 문자열 소문자, 대문자로 바꾸기 tolower (0) | 2024.11.23 |
C++ 부분 문자열 찾기std::string::find (0) | 2024.11.23 |
C++ std::transform 각 원소에 연산하기, vector 2배하기 (0) | 2024.11.21 |