# 문제
단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.

# 풀이
드디어 등장한 실버...
문자열 탐색과 관련한 문제다. 코드도 길지 않고 풀만하니 차분히 확인해보자.
정답 소스코드부터!
#include <iostream> #include <string> using namespace std; int count(string str); int main(){ ios_base::sync_with_stdio(false); // 두 표준 입출력 동기화 해제 cin.tie(NULL); // 입력과 출력 묶음을 풀기 string s; cin >> s; cout << count(s); return 0; } int count(string str){ string alphabet[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; for(int i=0; i<8; i++){ while(1){ if(str.find(alphabet[i]) != -1){ str.replace(str.find(alphabet[i]), alphabet[i].length(), "#"); }else break; } } return str.length(); }
해당 문제는 #include <string>를 추가해 그 안에 구현되어 있는 기능을 사용해야 한다.
오늘 사용할 것은 find와 replace로, 각 키워드에 레퍼런스 사이트를 링크해두었으니 아직 익숙하지 않다면 하나씩 확인해보고 넘어가자.
int count(string str){ string alphabet[8] = {"c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="}; for(int i=0; i<8; i++){ while(1){ if(str.find(alphabet[i]) != -1){ str.replace(str.find(alphabet[i]), alphabet[i].length(), "#"); }else break; } } return str.length(); }
아직 매우 짧은 코드지만 크로아티아 알파벳을 카운팅 해주는 함수를 별도로 구현해주었다.
우선 변경되어 입력된 크로아티아 알파벳을 찾기 위해, 해당 알파벳들이 담긴 배열을 하나 선언해준다.
이후 입력된 단어를 탐색하며 해당 문자를 찾을 수 있다면 (반환된 값이 npos 값이 아니라면) 찾은 알파벳을 #으로 바꿔주었다. 이는 개수를 세기 쉽게 하기 위함도 있고 "dz=", " z="등 유사하게 생긴 변환 알파벳을 중복의 가능성 없이 처리해주기 위함도 있다.
탐색이 끝난 후엔 변환된 단어의 길이를 반환해주면 끝이다.
예를 들어,
입력이 ljes=njak였다면 #e##ak으로 변환되어 6이 반환
ddz=z=였다면 d##으로 변환되어 3이 반환된다.

2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
'백준 > C++' 카테고리의 다른 글
[백준] 25206번: 너의 평점은 | C++ 풀이 (0) | 2023.05.26 |
---|---|
[백준] 1316번: 그룹 단어 체커 | C++ 풀이 (0) | 2023.05.25 |
[백준] 4344번: 평균은 넘겠지 | C++ 풀이 (0) | 2023.05.23 |
[백준] 1157번: 단어 공부 | C++ 풀이 (0) | 2023.05.22 |
[백준] 10988번: 팰린드롬인지 확인하기 | C++ 풀이 (0) | 2023.05.21 |