본문 바로가기

알고리즘/백준

백준 1972 놀라운 문자열 - substr로 해결못하는 문자열 처리 문제

728x90

문제 링크

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

 

1972번: 놀라운 문자열

문제 대문자 알파벳으로만 이루어져 있는 문자열이 있다. 이 문자열에 대해서 ‘D-쌍’이라는 것을 정의할 수 있는데, 이 문자열에 포함되어 있는, 거리가 D인 두 문자를 순서대로 나열한 것을 ��

www.acmicpc.net

종강 기념으로 다시 알고리즘 시작한다! 길고 긴 학기였다...

해결 아이디어

문자열 처리 문제이다.

각 case에 대해 1부터 len-1 까지, 처음부터 끝까지 검사하고 ,

set를 이용해 하나도 겹치지 않고 나오는지 개수를 파악해서 검사했다.

총 n^3의 시간복잡도가 사용되겠지만 case수가 100개가 최대이므로 시간내에 돌아간다.

 

코드

#include <bits/stdc++.h>
using namespace std;

int main(void){
    string s;
    bool it = true;
    while(it){
        cin>>s;
        if(s=="*"){
            it=false;
            break;
        }
        int len = s.length();
        bool flag = true;
        for(int i=1; i<=(len-1); i++){
            set<string> sett;
            for(int j=0; j<=len-i-1; j++){
                string b;
                b.push_back(s[j]);
                b.push_back(s[j+i]);
                sett.insert(b);
            }
            if(sett.size()!=len-i) flag=false;
            if(!flag){
                break;
            }
        }
        if(!flag) cout<<s<<" is NOT surprising.\n";
        else cout<<s<<" is surprising.\n";
    }
}