# 문제
단어가 주어졌을 때, 몇 개의 크로아티아 알파벳으로 이루어져 있는지 출력한다.
# 풀이
드디어 등장한 실버...
문자열 탐색과 관련한 문제다. 코드도 길지 않고 풀만하니 차분히 확인해보자.
정답 소스코드부터!
#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이 반환된다.
728x90
'백준 > 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 |