반응형
#INFO
난이도 : SIVLER5
문제출처 : 2941번: 크로아티아 알파벳 (acmicpc.net)
#SOVLE
처음에는 단순 if의 나열로 문제를 풀이했다. 구현은 매우 간단했지만, 소스코드가 너무 난잡해졌다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string str ="";
cin >> str;
int cnt = 0;
for (int i = 0 ; i < str.length() ; i++) {
if (str[i] == 'c') {
if (str[i+1] == '=' || str[i+1] == '-') {
cnt++;
i++;
continue;
}
}
else if (str[i] == 'l') {
if (str[i+1] == 'j') {
cnt++;
i++;
continue;
}
}
else if (str[i] == 'n') {
if (str[i+1] == 'j') {
cnt++;
i++;
continue;
}
}
else if (str[i] == 's') {
if (str[i+1] == '=') {
cnt++;
i++;
continue;
}
}
else if (str[i] == 'z') {
if (str[i+1] == '=') {
cnt++;
i++;
continue;
}
}
else if (str[i] == 'd') {
if (str[i+1] == 'z') {
if (str[i+2] == '=') {
cnt++;
i+=2;
continue;
}
}
else if (str[i+1] == '-') {
cnt++;
i++;
continue;
}
}
cnt++;
}
cout << cnt << '\n';
return 0;
}
구글링을 해보다 좋은 코드가 없을까 찾아보던 와중,, cryptosalamander님의 코드를 발견했다.
아래 코드와 같이 string 벡터에 크로아티아 알파벳들을 초기화한 뒤, for 반복문을 돌려서 입력받은 str(문자열)에 크로아티아 알파벳이 존재한다면, 해당하는 크로아티아 알파벳을 "#" 즉 1로 변경해 주면 깔끔하게 문자열의 길이를 출력할 수 있다.
*string 라이브러리의 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;
}
코드 출처 : https://cryptosalamander.tistory.com/15
반응형
'Archive2 > ProblemSolving' 카테고리의 다른 글
[BOJ] 11659 "구간 합 구하기 4" 문제 풀이 & 소스 코드 With C/C++ (0) | 2022.01.04 |
---|---|
[BOJ] 1193 "분수찾기" 문제 풀이 & 소스 코드 With C/C++ (0) | 2021.12.28 |
[BOJ] 1748 "수 이어쓰기" 문제 풀이 & 소스 코드 with C/C++ (0) | 2021.11.25 |
[BOJ] 2798 "블랙잭" 문제 풀이 & 소스 코드 with C/C++ (0) | 2021.11.21 |
[BOJ] 11656 "접미사 배열" 문제 풀이 & 소스 코드 with C/C++ (0) | 2021.09.02 |