Home [C++] 백준 2941번 : 크로아티아 알파벳
Post
Cancel

[C++] 백준 2941번 : 크로아티아 알파벳

[Silver V] 크로아티아 알파벳 - 2941

문제 링크

분류

구현, 문자열

문제 설명

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

크로아티아 알파벳 변경
č c=
ć c-
dz=
đ d-
lj lj
nj nj
š s=
ž z=

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

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

입력

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

단어는 크로아티아 알파벳으로 이루어져 있다. 문제 설명의 표에 나와있는 알파벳은 변경된 형태로 입력된다.

출력

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


풀이

소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;

int main() {
    string list[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
    string alpha;
    string replace_str = "A";

    cin >> alpha;

    for (string s : list) {
        while (alpha.find(s) != string::npos) {
            alpha.replace(alpha.find(s), s.length(), replace_str);
        }
    }


    cout << alpha.length();
}

설명


크로아티아 알파벳에 해당하는 글자를 입력된 문자열에서 찾아 다른 단일 문자로 대체하면 됩니다.

예를 들어, c=c= 의 경우 A 로 치환하면 AA 가 되어 총 문자열 길이는 2임을 쉽게 구할 수 있습니다.

1
#include <string>

먼저 문자열 관련 헤더파일을 불러와줍니다.

1
2
3
string list[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="};
string alpha;
string replace_str = "A";

크로아티아 알파벳들을 담은 배열을 하나 선언해줍니다. 입력 받을 문자열과 대체 문자열도 함께 선언합니다.

1
cin >> alpha;

문자열을 입력받습니다.

1
2
3
4
5
for (string s : list) {
        while (alpha.find(s) != string::npos) {
            alpha.replace(alpha.find(s), s.length(), replace_str);
        }
    }

메인이 되는 반복문 코드입니다.
가장 바깥의 for문은 크로아티아 알파벳 배열을 순차적으로 도는 foreach loop 입니다. 하나의 크로아티아 알파벳 s마다 작업을 수행합니다.

while 문은 입력된 문자열에 크로아티아 알파벳이 존재하지 않을 때까지 이하의 작업을 수행합니다.

문자열 찾기

str.find(target)은 문자열 strtarget이 존재하면 그 위치를 인덱스로 반환하고, 존재하지 않으면 string::npos 를 반환합니다.

문자열 대체하기

replace 함수로 문자열의 일부를 다른 문자열로 대체할 수 있습니다.

1
str.replace(index, length, replace_str);

대체할 부분의 인덱스, 대체할 부분의 길이, 대체할 대상을 인자로 받습니다.

위 코드에서는 find 함수로 인덱스를 전달하고, length 함수로 대체할 길이를 전달했으며, “A” 의 값을 가진 문자열 replace_str 을 전달했습니다.


1
cout << alpha.length();

정리된 문자열의 길이를 역시 length 함수를 통해 출력합니다.

length() :
문자열의 길이를 정수로 반환합니다.



This post is licensed under CC BY 4.0 by the author.