백준 2941번 문제 크로아티아 알파벳이다.
https://www.acmicpc.net/problem/2941
2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
< 문제 >
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다.
| 크로아티아 알파벳 | 변경 |
| č | c= |
| ć | c- |
| dž | dz= |
| đ | d= |
| lj | lj |
| nj | nj |
| š | s= |
| ž | z= |
예를 들어, ljes=njak은 크로아티아 알파벳 6개(lj, e, š, nj, a, k)로 이루어져 있다. 단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
dž는 무조건 하나의 알파벳으로 쓰이고, d와 ž가 분리된 것으로 보지 않는다. lj와 nj도 마찬가지이다. 위 목록에 없는 알파벳은 한 글자씩 센다.
< 예제 >

문제는 간단하다.
크로아티아 알파벳으로 입력했을 때 입력된 문자가 1개인 것으로 계산해서 입력된 문자가 몇개인지 확인하는 것이다.
ljes=njak는 lj / e / s= / nj / a / k 이렇게 6개의 문자로 구성되어 6이라는 출력을 하는 것이다.
그렇다면 코드를 보도록 하자
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
cin >> str;
int count = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == 'c' && str[i + 1] == '=') {
count++;
i += 1;
}
else if (str[i] == 'c' && str[i + 1] == '-') {
count++;
i += 1;
}
else if (str[i] == 'd' && str[i + 1] == 'z' && str[i + 2] == '=') {
count++;
i += 2;
}
else if (str[i] == 'd' && str[i + 1] == '-') {
count++;
i += 1;
}
else if (str[i] == 'l' && str[i + 1] == 'j') {
count++;
i += 1;
}
else if (str[i] == 'n' && str[i + 1] == 'j') {
count++;
i += 1;
}
else if (str[i] == 's' && str[i + 1] == '=') {
count++;
i += 1;
}
else if (str[i] == 'z' && str[i + 1] == '=') {
count++;
i += 1;
}
else
count++;
}
cout << count;
}
else if 문을 사용하였다.
for문을 이용하여 입력된 문자열을 훑어볼 때 특정 단어 후 다음 단어가 크로아티아 알파벳과 일치하는 단어일 경우
그러니까 c 다음 =가 나와서 c=로 크로아티아 알파벳이 완성될 경우 i를 1 증가시켜 =는 탐색하지 못하게 한 후 1을 증가시키는 것이다.
(for문을 돌면 i++가 되어 i+=1을 하면 다음 문자를 건너뛰고 계산하는 것이다.)
그 외에는 평범한 알파벳이므로 count++ 해서 단어의 수를 센 것이다.
'백준 > 단계별' 카테고리의 다른 글
| [C++] 백준 1712 (0) | 2022.12.19 |
|---|---|
| [C++] 백준 1316 (1) | 2022.12.17 |
| [C++] 백준 5622 (0) | 2022.12.17 |
| [C++] 백준 2908 (0) | 2022.12.17 |
| [C++] 백준 1152 (0) | 2022.12.16 |