쿼드트리뒤집기 스택오버플로우 문제에 대해서 질문드립니다

  • pica4500
    pica4500
    #include<iostream>
    #include<string>
    #include<deque>
    using namespace std;
    
    string cutString(string input, int from, int to) {
        string result;
        for (int i = from; i < to; i++) {
            result += input[i];
        }
        return result;
    }
    
    int findLen(string input) {
        if (input[0] != 'x') return 1;
        int position = 1;
        deque<int> list;
        list.push_back(0);
        while (!list.empty()) {
            if (input[position] == 'x') list.push_back(0);
            else {
                list.back()++;
                if (list.back() == 4) {
                    list.pop_back();
                    if (!list.empty()) list.back()++;
                }
            }
            position++;
        }
        return position;
    }
    
    string solve(string input) {
        if (input.size() == 1) return input;
        int position = 1;
        int LUfrom = 0, LUto = 0, RUfrom = 0, RUto = 0, LDfrom = 0, LDto = 0, RDfrom = 0, RDto = 0;
        LUfrom = position;
        LUto = position += findLen(cutString(input, LUfrom, input.size()));
        RUfrom = position;
        RUto = position += findLen(cutString(input, RUfrom, input.size()));
        LDfrom = position;
        LDto = position += findLen(cutString(input, LDfrom, input.size()));
        RDfrom = position;
        RDto = position += findLen(cutString(input, RDfrom, input.size())); 
        return ('x' + solve(cutString(input, LDfrom, LDto)) + solve(cutString(input, RDfrom, RDto)) + solve(cutString(input, LUfrom, LUto)) + solve(cutString(input, RUfrom, RUto)));
    }
    
    int main() {
        int T;
        cin >> T;
        while (T--) {
            string input;
            cin >> input;
            cout << solve(input) << endl;
        }
    }
    

    제가 짠 프로그램에 stack overflow가 의심이 됩니다.
    각 뭉텅이에 대한 to는 findLen란 함수를 통해 from위치부터 문자열 끝까지 잘라서 input으로 넣어 새로운 input에서 포인터를 처음부터 한칸씩 옮겨 뭉텅이의 끝을 찾도록 코딩하였는데..
    문자열 길이가 짧은데 스택오버플로우가 발생할수있는건지 잘모르겠습니다..
    도움 부탁드립니다 ㅠㅠ


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