-
728x90
* 접근한 방법
- 벡터에 변경된 문자열을 담는다.
- loop을 돌면서 벡터에 담긴 문자열과 같은 것이 있는지 find()
- 같은 문자열을 발견하면 삭제
- 문자열이 삭제된 횟수 + 문자열에 남은 size() 출력#include <iostream> #include <vector> #include <string> using namespace std; int main() { int sum = 0, num = 0, blank = 0; bool find = false; vector<string> cro = { "c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z=" }; string s; getline(cin, s); while (1) { find = false; for (int i = 0; i < cro.size(); i++) { if (s.find(cro[i]) != string::npos) { int place = s.find(cro[i]); // n(lj)j에서 lj가 제거되면, nj를 또 삭제하기 때문에 공백을 넣어 방지 s[place + cro[i].size() - 1] = ' '; s.erase(place, cro[i].size() - 1); find = true; blank++; num++; break; } } if (find == false) break; } num = num + s.size() - blank; cout << num; return 0; }
* 생각하지 못했던 점
- find()결과가 없는 경우 0이 들어올 것 같았는데, 엄청큰 숫자가 들어옴.
=> 결과가 없는 경우는 s.find("문자열") == string::npos 이렇게 비교하자!
- 크로아티아문자에 해당하는 문자를 문자열사이에서 빼게되면 그 앞, 뒤글자들이 모여서 또 크로아티아문자로 계산함.
=> 같은 문자열을 삭제할때 공백을 넣어주어 분리해주자!
=> 문자열이 삭제된 횟수 + 문자열에 남은 size()를 출력할때, size()에 공백도 포함되어있으므로 공백 수는 제거하자!'알고리즘 풀이 > 백준' 카테고리의 다른 글
[1712] 백준 : 손익분기점(C++) (0) 2020.04.24 [1316] 백준 : 그룹 단어 체커(C++) (0) 2020.04.24 [10845] 백준 알고리즘 : 큐(C++) (0) 2019.11.20 [1874] 백준 알고리즘 : 스택 수열(C++) (0) 2019.11.20 [9012] 백준 알고리즘 : 괄호(C++) (0) 2019.11.20 댓글