본문 바로가기

백준/C++

[Baekjoon/C++] 24937번 - SciComLove (2022)

[백준] Baekjoon Online Judge

문제로 이동

 

문제

귀여운 아기 리프가 가장 좋아하는 문자열은 "SciComLove"(따옴표 제외)입니다. 귀여운 아기 리프는 아래 과정을 반복하며 문자열을 가지고 놀고 있습니다.

  • 문자열의 가장 첫 문자를 떼어낸 뒤, 문자열의 맨 뒤에 붙입니다.

귀여운 아기 리프가 이 과정을 N번 반복한 뒤, 문자열의 최종 상태를 출력하세요.

 

입력

정수 N이 주어집니다.

 

출력

문제의 답을 출력합니다. 대소문자에 주의하세요.

 


풀이

#include <iostream>
using namespace std;

string s = "SciComLove";

void print(int start, int end);

void print(int start, int end) {
    for (int i = start; i < end; i++) cout << s[i];
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int N;
    cin >> N;
    
    int n = (N % s.length());

    print(n, s.length());
    print(0, n);
    cout << '\n';

    return 0;
}

 문자열의 가장 첫 문자를 맨 뒤에 붙이는 과정을 N번 반복했을 때, 해당 문자열의 시작 부분은 N % (문자열의 길이)와 같다. 이를 이용하여 문제를 풀었다.

 

void print(int start, int end) {
    for (int i = start; i < end; i++) cout << s[i];
}

 원하는 범위의 문자를 출력하는 함수이다.

 

    int n = (N % s.length());

    print(n, s.length());
    print(0, n);
    cout << '\n';

 답을 출력하는 부분의 코드이다. N % (문자열의 길이)부터 문자열의 끝까지 출력하고, 0부터 N % (문자열의 길이)까지의 문자를 출력한다.