728x90
[백준알고리즘] 2941번: 크로아티아 알파벳 -C++
2941번: 크로아티아 알파벳 (acmicpc.net)
크로아티아 알파벳과 변경된 문자를 맵핑하는 개념이 필요했다.
set을 만들고, 변경 후의 문자들을 넣어주었다.
이때 "dz="의 경우만 길이가 3이고 나머지는 2이기 때문에 "dz="를 제외한 것들을 넣어주었다.
이후 하나씩 인덱싱하면서 앞 글자와 현재 글자를 한 쌍으로 만들어 길이가 2인 substr을 만들었다.
각 substr이 변경된 문자 set에 포함되는 경우 원래 길이는 하나 더 늘어나지 않기 때문에 (2글자가 1글자로 맵핑되는 것이기 때문에) continue를 해준다.
다만, 이때 "z="였다면, "dz="일 수도 있기 때문에 확인을 해준다. "z="였다면 카운팅을 하나 안 해주면 되지만, "dz="였다면 카운팅을 하나 빼줘야 3글자를 1글자로 맞추는 것이기 때문이다.
#include <iostream>
#include <string>
#include <set>
int main(void)
{
std::string croatia;
std::cin >> croatia;
std::set<std::string> word_map;
word_map.insert("c=");
word_map.insert("c-");
word_map.insert("d-");
word_map.insert("lj");
word_map.insert("nj");
word_map.insert("s=");
word_map.insert("z=");
int total = 1;
for (size_t i = 1; i < croatia.length(); i++)
{
std::string temp = croatia.substr(i - 1, 2);
if (word_map.find(temp) != word_map.end())
{
if (temp == "z=" && i > 1)
{
temp = croatia.substr(i - 2, 3);
if (temp == "dz=") total--;
}
continue;
}
total++;
}
std::cout << total;
}
잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다
728x90
'algorithm > 백준알고리즘' 카테고리의 다른 글
[백준알고리즘] 1193번: 분수찾기 -C++ (0) | 2021.01.17 |
---|---|
[백준알고리즘] 2292번: 벌집 -C++ (0) | 2021.01.17 |
[백준알고리즘] 2908번: 상수 -C++ (0) | 2021.01.16 |
[백준알고리즘] 1152번: 단어의 개수 -C++ (0) | 2021.01.16 |
[백준알고리즘] 1157번: 단어 공부 -C++ (0) | 2021.01.12 |