-
백준 2941 - 크로아티아 알파벳카테고리 없음 2020. 6. 17. 16:36반응형
=> 문자열을 다룰 줄 아는지 물어보는 문제입니다.
=> string 헤더를 제대로 이해하고 내장되어있는 함수들을 통해 풀 수 있습니다.
=> 저는 처음에 if문으로 구현할 수 있을 줄 알았는데, 해당 방식으로 하면 참조하지 말아야 할 위치를 참조하는 등의 잘못이 생깁니다.
=> string의 find() 함수와 replace 함수를 적절히 사용하여야 합니다.
-
크로아티아 알파벳을 담을 배열을 생성하고 초기화한다.
-
해당 크로아티아알파벳을 찾을 경우 해당 구간을 *로 바꿔준다
-
위의 과정은 같은 단어가 여러 번 들어가 있을 경우를 위해 다시 검색되지 않도록 하기 위해서 하는 과정이다.
-
해당 과정을 진행하며, 크로아티아 알파벳의 개수와 해당 알파벳의 길이를 점진적으로 구한다.
-
문자열의 길이 - 크로아티아 알파벳의 길이의 총합
-
위의 과정을 통해 일반 알파벳의 갯수를 구한다
-
일반 알파벳의 갯수개수 + 크로아티아 알파벳 개수의 총합을 출력한다.
<code>
#include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); string arr[8]={"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; string word; cin >> word; int wordsize = word.size(); int croa=0; int croaCnt=0; for(int i=0; i<8; i++) { while(word.find(arr[i]) != string::npos) { croa +=arr[i].size(); croaCnt++; word.replace(word.find(arr[i]), arr[i].size(), "*"); } } int Alpha = wordsize - croa; cout << Alpha+croaCnt<<'\n'; return 0; }
반응형 -