카테고리 없음

[C++]Circular Right Shift 원형 우측 이동 프로그램

기술1 2024. 3. 11. 00:02
반응형

#include <iostream>
#include <vector>

using namespace std;
int main() {
    int n;
    cin >> n;

    if (n > 100) {
        cout << "입력될 정수의 개수는 100 이하여야 합니다." << endl;
        return 1;
    }


    vector<int> integers(n);


    for (int i = 0; i < n; ++i) {
        std::cin >> integers[i];
    }

    int k;
    std::cin >> k;

    if (k < n) {
        std::vector<int> shiftedIntegers(n);
        for (int i = 0; i < n; ++i) {
            shiftedIntegers[(i + k) % n] = integers[i];
        }
        integers = shiftedIntegers;
    }
    else {
        cout << "k < n" << endl;
    }

    for (int i = 0; i < n; ++i) {
        cout << integers[i] << " ";
    }
    cout << endl;

    return 0;
}

vector를 사용했습니다. 동적 배열을 만들어준 후 다른 배열을 하나 더 만들어줘서 거기에 옮기는 방식으로 진행이 되는데요.

 

먼저 for문을 통해 입력받을 정수의 개수를 구합니다.

 

그 다음 vector를 써주고 int i = 0; i <n; ++i 방식으로 진행이 되는데요. 여기서

if (k < n) {
    vector<int> shiftedIntegers(n);
    for (int i = 0; i < n; ++i) {
        shiftedIntegers[(i + k) % n] = integers[i];
    }
    integers = shiftedIntegers;
}

해당 부분의 경우 나머지를 구하는 방식으로 진행이 되는데요. 이것이 가능한 이유는 만약에 정수가 4개라면 4번째는 똑같이 제자리로 오게 되기 때문에 그것을 고려하여 % 방식을 통해 진행이 되는 것입니다. 

 

원리만 알면 가볍게 풀 수 있는 문제입니다. 

반응형