습관처럼
C++ - 1차원 배열에서의 시계방향, 반시계 방향 (feat: rotate) 본문
여러 알고리즘 문제를 풀때 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()) )
'Language > C++' 카테고리의 다른 글
C++ - 조합 및 순열 (0) | 2020.06.23 |
---|---|
C++ - String 클래스, 문자열 총정리 (0) | 2020.06.19 |
C++ - n x n 2차원 배열에 대한 조작 (90도 회전 / 점대칭 / 선대칭) (0) | 2020.04.21 |
C++ - Algorithm 헤더 파일 binary_search(), lower_bound(), upper_bound() (0) | 2020.04.13 |
C++ - Algorithm 헤더 파일 replace(), replace_if(), remove(), remove_if() (0) | 2020.04.13 |