[백준] 2941번 C/C++ 풀이 _ 크로아티아 알파벳



- 출처 : https://www.acmicpc.net/problem/2941 

시간 제한메모리 제한제출정답맞은 사람정답 비율
1 초128 MB99744060357642.796%

문제

예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 다음과 같이 변경해서 입력했다.

크로아티아 알파벳변경
čc=
ćc-
dz=
ñd-
ljlj
njnj
šs=
žz=

예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.

입력

첫째 줄에 최대 100글자의 단어가 주어진다. 알파벳 소문자와 '-', '='로만 이루어져 있다.

문제 설명에 나와있는 크로아티아 알파벳만 주어진다.

출력

입력으로 주어진 단어가 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

예제 입력 1 

ljes=njak

예제 출력 1 

6

예제 입력 2 

ddz=z=

예제 출력 2 

3

예제 입력 3 

nljj

예제 출력 3 

3

예제 입력 4 

c=c=

예제 출력 4 

2












- 풀이방법 

기존에 있던 크로아티아 단어를 find 함수를 통하여 |로 치환해주고 글자 개수를 센다. 
글자 개수를 세고 나서 '|'가 아닌 알파벳을 추가로 세면 정답이다. 



- 소스코드 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream> 
#include <string>
#include <vector>
#pragma warning(disable : 4996)
 
using namespace std;
 
vector<string> str_vec = { "c=""c-","dz=","d-","lj","nj","s=","z=" };
 
int main() {
    string _string;
    cin >> _string;
    int tot_num = 0;
 
    // vec 안의 string 이 존재하는지 find 함수로 하나하나씩 찾아본다. 
    for (int tot_idx = 0; tot_idx < str_vec.size(); tot_idx++) {
        int each_char_num = 0;
 
        // 글자가 찾아지면 찾은 글자의 인덱스 올리고 다음부터 찾기  
        int sub_index = _string.find(str_vec.at(tot_idx), 0);
        while ( sub_index  != -1 ) {
            // 글자 찾으면 |로 치환 
            _string.replace(sub_index, str_vec.at(tot_idx).size() , "|");
            sub_index = _string.find(str_vec.at(tot_idx), sub_index + 1);
            tot_num++;
        } 
    }
 
    // - 가 아닌 모든 글자를 카운트 한다. 
    for (int str_idx = 0; str_idx < _string.length(); str_idx++)
        if (_string.at(str_idx) != '|') tot_num++;
 
    cout << tot_num;
 
    return 0
}
cs