[C++][백준 30089] 새로운 문자열 만들기

PublicMinsu·2024년 1월 9일

문제

접근 방법

앞에서 읽으나 뒤에서 읽으나 똑같은 문자열을 만드는 것이다.
앞에서부터 탐색하며 뒤에서 읽은 경우와 똑같은 구간을 찾는다.
이후 똑같지 않은 부분을 뒤에 붙이면 결국 앞에서, 뒤에서 읽은 경우가 똑같아진다.

코드

#include <iostream>
using namespace std;
int T;
string S, X;
int main()
{
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> T;
    while (T--)
    {
        cin >> S;
        X = S;
        int startIdx = 0;
        while (true)
        {
            bool isSame = true;
            for (int i = 0; i + startIdx < S.size(); ++i)
            {
                if (S[i + startIdx] != S[S.size() - i - 1]) // 뒤의 값과 다르다면
                {
                    ++startIdx;
                    isSame = false;
                    break;
                }
            }
            if (isSame)
            {
                break;
            }
        }
        for (int i = startIdx - 1; i >= 0; --i) // 같은 부분이 아닌 곳부터 역순으로 X에 집어넣기
        {
            X.push_back(S[i]);
        }
        cout << X << "\n";
    }
    return 0;
}

풀이

앞에서부터 한 칸씩 뒤로 가면서 뒤에서부터 읽은 값과 동일한 구간을 찾는 것이 핵심이다.

profile
연락 : publicminsu@naver.com

0개의 댓글