문제에 조건이 명확하지 않음

 

- Test1 : 전체 문자열 비교 (명확하나 문제조건이 부실하여 오히려 정답 안됨)

#include <iostream>
#include <vector>
 
using namespace std;
 
int sun = 0;
 
string st;
int stsize;
 
bool check(string tmp, int len) {
 
    int i = 0;
    while(1) {
        if (i+len >= stsize) break;
        string be = st.substr(i + len, len);
        if (tmp != be)
            return false;
        i += len;
    }
 
    return true;
 
}
 
void run() {
    sun++;
 
    cin >> st;
 
    string tmp;
    stsize = st.size();
    for (int i = 1; i <= stsize; i++) {
        if (stsize % i != 0) continue;
        tmp = st.substr(0, i);
        if (check(tmp, i)==1)
            break;
    }
 
    cout << "#" << sun<<" "<<tmp.length();
 
    cout << endl;
}
 
int main() {
    int t = 0;
 
    cin >> t;
 
    for (int i = 0; i < t; i++) {
        run();
    }
 
    return 0;
}

 

- Test2 : 문자열을 전체 다 확인할 필요 없이 다음문자열과만 비교

#include <iostream>
#include <vector>

using namespace std;

int sun = 0;

string st;
int stsize;

bool check(string tmp, int len) {

    string be = st.substr(len, len);
    if (tmp == be) return true;
    if (tmp != be) return false;
}

void run() {
    sun++;

    cin >> st;

    string tmp;
    stsize = st.size();
    for (int i = 1; i <= 10; i++) {
        tmp = st.substr(0, i);
        if (check(tmp, i)==1)
            break;
    }

    cout << "#" << sun<<" "<<tmp.length();

    cout << endl;
}

int main() {
    int t = 0;

    cin >> t;

    for (int i = 0; i < t; i++) {
        run();
    }

    return 0;
}

+ Recent posts