팰린드롬 만들기 문제 오답 케이스를 못 찾아서 질문드립니다

  • porcosedol
    porcosedol

    PALINDROMIZE

    팰린드롬 만들기 문제에 대한 질문입니다.
    여러 입력값을 넣어봐도 WA의 원인을 찾지 못하고 있습니다.
    코드에 대한 설명은 spoiler에 넣었습니다.

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main() {
        int test_num;
        cin >> test_num;
        while (test_num--) {
            string str;
            cin >> str;
    
            int len = str.size();
            int left = 0;
            int right = len - 1;
            int end = right;
    
            while ((left != right) && left <= end && right <= end) {
                if (str[left] == str[right])
                    left++, right--;
                else {
                    len++;
                    if (right < end)
                        right++;
                    else
                        left++;
                }
            }
            cout << len << endl;
        }
        return 0;
    }
    

    왼쪽, 오른쪽 포지션에 같은 글자가 있으면 같이 안쪽으로 포지션을 옮기고 다르면 오른쪽 포지션은 오른쪽으로 이동하고 왼쪽 포지션은 팰린드롬을 만날때까지 이동하면서 거리를 쟀습니다.


    10년 전
4개의 댓글이 있습니다.
  • 일루
    일루

    문자열 '뒤'에만 문자열을 붙일 수 있어서 잘 안되지 않을까요?


    10년 전 link
  • porcosedol
    porcosedol

    @일루
    '뒤'에만 붙이는게 문제의 의도가 아닌가요? 다른 분들이 푼 답을 살짝 봐도 그런 것 같았어요


    10년 전 link
  • Being
    Being

    무슨 말씀이신지는 모르겠으나 작성하신 풀이는 일루님 말씀대로 문자열 중간에 글자를 삽입하게 되는데요, 예를 들어 abbcba 라는 문자열이 있다면 abbcbabcbba가 답이겠으나 올려주신 코드에서는 a, b를 차례로 묶어 버린 뒤 bc 부분에서 맞지 않는다고 오른쪽으로 한 칸 가 버리기 때문에 잘 안 됩니다.


    10년 전 link
  • porcosedol
    porcosedol

    네. 제가 적은 풀이는 Being님이 알려주신 케이스에서 제대로 동작되지 않네요. 다시 해법을 생각해보겠습니다. 감사드립니다.


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.