알고리즘/백준(BOJ)

백준 2941 크로아티아 알파벳

오뚜깅 2021. 1. 29. 14:59
반응형

이 문제는 영어로 변형된 크로아티아 알파벳을 해석하여 실제 몇 글자의 크로아티아 알파벳으로 구성되어있는지 알아내는 문제이다.

 

예시로 크로아티아 알파벳이 영어로 변환되었을 때 여러 글자로 구성되는 케이스를 대표로 8개만 보여줬기 때문에 해당 8개에 대해서만 주어진 문자열에서 있는지 검색하고 없다면 나머지는 한 글자로 변형되었다고 해석하면 된다.

 

croatia[8] 배열을 생성하고 여러 글자의 크로아티아 알파벳을 넣어준뒤 주어진 문자열에서 배열 안의 글자와 일치하는 문자열이 존재한다면 한 글자인 "!"로 대체해주어 숫자를 계산할 수 있다.

 

여기서 주의할 점은 검사 후 한 번 대체한 문자열이 뒤에 또 나타날 수 있기 때문에 한 번 대체한 뒤에는 다시 처음부터 검사를 해줘야 한다.

#include <iostream>

using namespace std;

string croatia[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};

int main(){
    string s;
    cin >> s;

    for(int i = 0; i < 8; i++){
        if(s.find(croatia[i]) != string::npos){
            s.replace(s.find(croatia[i]), croatia[i].size(), "!");
            i = -1;
        }            
    }

    cout << s.size();

    return 0;
}

 

 

반응형