알고리즘
[C++] 백준 2941번 크로아티아 알파벳
J3SUNG
2019. 8. 4. 23:03
728x90
입력된 단어가 몇개의 크로아티아 단어로 이루어져 있는지 찾는 문제입니다.
string arr[8] = {"c=", "c-", "d-", "lj", "nj", "s=", "z=", "dz="};
다음과 같은 크로아티아 단어 배열을 만듭니다.
마지막 글자인 dz=을 제외하곤 전부 두 글자임을 확인할 수 있습니다.
단어를 2글자씩 잘라서 7개의 단어와 같은지 비교하고
같을 경우 현재위치 i와 i+2를 단어라고 체크하고 카운트를 증가합니다.
그리고 단어를 3글자씩 비교해서 dz=과 같은지 비교합니다.
같을 경우 z=을 비교할 때 카운트를 증가할 것이기 때문에
카운트는 증가하지 않고 현재위치 i만 단어라고 체크를 해줍니다.
이와 같은 과정을 마치면 위에 나온 글자와 같은 단어의 개수는
전부 count에 들어가 있습니다.
이 때 위에 등록되지 않은 단어들은 이 전 체크했던
단어가 아닌 배열값들을 하나씩 카운트를 증가해줍니다.
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int count = 0;
int chk[110];
string arr[8] = {"c=", "c-", "d-", "lj", "nj", "s=", "z=", "dz="};
string s;
memset(chk, 0, sizeof(chk));
cin >> s;
for (int i = 0; i < s.length(); ++i) {
for (int j = 0; j < 8; ++j) {
if (arr[j] == s.substr(i, 2)) {
chk[i] = 1;
chk[i + 1] = 1;
++count;
}
}
if (arr[7] == s.substr(i, 3)) {
chk[i] = 1;
}
}
for (int i = 0; i < s.length(); ++i) {
if (chk[i] == 0) {
++count;
}
}
cout << count << endl;
return 0;
}