정화 코딩

[C++] 건공문자열 (백준 30823번) 본문

PS

[C++] 건공문자열 (백준 30823번)

jungh150c 2025. 4. 6. 14:33

https://www.acmicpc.net/problem/30823

 

처음에는 그냥 진짜 문제 지문 그대로 구현했더니 시간 초과를 받아서 대충 이런식으로... 몇개 해보면서 규칙을 찾았다.

 

규칙을 정리하면 다음과 같다.

뒤의 (n - k + 1)개의 문자들을 순서를 유지하고 그대로 앞으로 나온다.

앞의 (k - 1)개의 문자들은 뒤로 가는데, 이 순서는 주의가 필요하다. n + k가 홀수면 순서를 유지하고 그대로 붙고, 짝수면 뒤집힌 순서로 붙는다.

 

#include <iostream>
using namespace std;

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, k;
    cin >> n >> k;

    string s;
    cin >> s;

    string ans;
    ans.resize(n);

    if ((n + k) % 2 == 1) {
        for (int i = 0; i < k - 1; i++) {
            ans[n - k + 1 + i] = s[i];
        }
    } else {
        for (int i = 0; i < k - 1; i++) {
            ans[n - i - 1] = s[i];
        }
    }

    for (int i = k - 1; i < n; i++) {
        ans[i - k + 1] = s[i];
    }

    cout << ans << '\n';
}

(AC)

 

    string ans;
    ans.resize(n);

문자열 크기를 지정하고 싶으면 위와 같이 하면 된다.

 

'PS' 카테고리의 다른 글

[C++] 삼각형만들기 (백준 2622번)  (0) 2025.04.10
[C++] 아기 상어 (백준 16236번)  (2) 2025.04.07
[C++] 치킨 배달 (백준 15686번)  (0) 2025.04.04
[C++] 반복수열 (백준 2331번)  (0) 2025.04.04
[C++] IQ Test (백준 1111번)  (0) 2025.04.02
Comments