백준 -단계별로 풀어보기 - 2941
https://www.acmicpc.net/problem/2941
풀이1 (내 풀이)
- 1) - 가 있는 경우 2) = 가 있는 경우 3) j 가 있는 경우 각각에 대해 if 조건문으로 n (단어 길이) 에서 1 혹은 2씩 감소시킨다.
#include <iostream>
#include <string>
using namespace std;
/*
* 제시된 9개의 크로아티아 알파벳 제외 나머지 알파벳은 정상적으로 세는 것다.
* = 이 붙은 것은 dz=인 경우 (-2) 이를 제외하고 (-1)
* - 이 붙은 것은 언제나 (-1)
*
*/
int main() {
cin.tie(NULL);
ios_base::sync_with_stdio(false);
string s;
cin >> s;
int n = s.length();
for (int i = 1; i < s.length(); i++)
{
if (s[i] == '-')
n -= 1;
if (s[i] == 'j' && (s[i - 1] == 'l' || s[i - 1] == 'n'))
n -= 1;
if (s[i] == '=')
{
if (i - 2 >= 0) {
if (s[i - 1] == 'z' && s[i - 2] == 'd')
n -= 2;
else
n -= 1;
}
else
n -= 1;
}
}
cout << n;
return 0;
}
풀이2 (다른사람)
- 단순 if문으로 풀지 않고, 크로아티아 알파벳에 해당하는 문자열들을 벡터로 선언하고, 이와 일치하는 문자열들을 변환하는 방식으로 푼점이 깔끔하다고 생각한다.
- replace : pos 위치부터 count 개의 문자를 str로 대체(치환)
basic_string& replace(size_type pos, size_type count, const basic_string& str);
- find, replace 를 활용한 코드로 다음부터는 이 함수를 사용해야겠다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<string> croatian = {"c=","c-","dz=","d-","lj","nj","s=","z="};
int idx;
string str;
cin >> str;
for (int i =0 ; i <croatian.size(); i++)
{
while(1){
idx = str.find(croatian[i]);
if (idx == string :: npos) //못 찾음
break;
str.replace(idx, croatian[i].length(), "#");
}
}
cout<< str.length();
return 0;
}
'전공 > 알고리즘(algorithm)' 카테고리의 다른 글
[C++] 백준(BOJ) 25206 너의 평점은 (2) | 2024.01.05 |
---|---|
[C++] 백준(BOJ) 1316 그룹 단어 체커 (1) | 2024.01.04 |
[C++] 백준(BOJ) 1157 단어공부 (1) | 2024.01.04 |
[C++] 백준(BOJ) cin.tie(NULL) / ios_base::sync_with_stdio(false) / endl 대신 \n (1) | 2024.01.02 |
[C++] 백준(BOJ) 10988 팰린드롬인지 확인하기 (1) | 2024.01.02 |