[c++/알고리즘] 백준 2941 크로아티아 알파벳

corncheese·2021년 7월 15일
1

알고리즘문제풀이

목록 보기
6/31

이 문제 역시! stl 라이브러리를 어떻게 잘 쓰느냐..로 갈리는 문제였다.
stl 공부도 꾸준히 하자!


내가 작성한 코드

// 백준 2941번 - 크로아티아 알파벳
#include <iostream>
#include <string>

using namespace std;

int main(){
    string a;
    int cnt=0;
    cin >> a;

    for(int i=0; a[i] != '\0'; i++){
        if(a[i] == 'c'){
            if(a[i+1] == '=') i++;
            else if(a[i+1] == '-') i++;
        }
        else if(a[i] == 'd'){
            if(a[i+1] == 'z' && a[i+2] == '=') i+=2;
            else if(a[i+1] == '-') i++;
        }
        else if(a[i]=='l' && a[i+1]=='j') i++;
        else if(a[i]=='n' && a[i+1]=='j') i++;
        else if(a[i]=='s' && a[i+1]=='=') i++;
        else if(a[i]=='z' && a[i+1]=='=') i++;

        cnt++;
     }

    cout << cnt;
}
  • if문의 향연..

stl을 사용한 코드

// 백준 2941번 - 크로아티아 알파벳
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){
    vector<string> croa = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
    int index;
    string str;
    cin >> str;

    for(int i=0; i<croa.size(); i++){
        while(1){
            index = str.find(croa[i]);

            //크로아티아 문자열이 없을 경우
            if(index == -1) break;

            //크로아티아 문자열 -> '!'으로 바꾸기
            str.replace(index, croa[i].length(), "!");
        }
    }

    cout << str.length();
}

사용된 STL

  • string.find("문자열") 문자열을 검색할 수도 있구나..
    string에서 찾고자하는 문자열과 일치하는 부분의 처음위치를 반환한다.
  • 사용된 문자열이 있을 경우
    해당 문자열의 시작점부터 길이를 "!"로 대체한다.
    또 존재할 경우 찾아서 "!"로 대체하고, 더이상 없으면 break문으로 나온다.
    string.replace(교체해야 할 위치, 교체될 문자열의 길이, 대체할 문자열)

++ string.replace(string.find(find_str), find_str.length(), replece_str);
아예 이렇게 작성 할 수도 있다.

최종적으로 문자열의 길이(모두 한 단어로 구성됨)를 출력하면 정답!

0개의 댓글