반응형
728x170
어렵지 않았다
다만 첫번째로 못풀었다.
왜 그런지 고찰해보자
https://www.acmicpc.net/problem/1543
#맞은 풀이
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
string target;
getline(cin, s);
getline(cin, target);
int size = target.size();
int cnt = 0;
while (1) {
int idx = s.find(target);
//찾았으면 해당 문자열에서 삭제
if (idx != string::npos) {
auto it = s.begin() + idx;
//s.erase(it, it+size); -> 삭제
s = s.substr(idx + size);
cnt++;
continue;
//나머지 문자열에서 다시 조사
}
else {
break;
}
}
cout << cnt;
return 0;
}
여기서 erase로 푼 것은 틀리고
substr으로 푼 것은 맞았다..
무슨 차이일까?
s의 변화를 보자
우선 맞는 정답인 substr부터 보자
위 2개의 입력에 대해 아래처럼 서브스트링이 나왔다.
erase를 보자
?? 뭔가 덜 지워졌다
즉, 앞에 것은 읽을 필요가 없음에도
앞에 것은 단어에 속하지 않아서 남아버린 것이다.
erase로는 특정 단어만 지우는 것이지 특정단어가 출현한 이후의 문자열만 남기는 것은 아니었다.
substr -> 특정 문자 출현 이후의 문자열만 담음
erase -> 특정 문자만 없앤 문자열을 담음
시도는 좋았으나 substr, erase를 잘 사용할 수 있도록 연습해보자
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 1753번, 최단경로 : C++ [CPP] ★★★★★ (0) | 2021.12.07 |
---|---|
백준, BOJ, 16637번, 괄호추가하기 : C++ [CPP] (0) | 2021.12.06 |
백준, BOJ, 2503번, 숫자야구 : C++ [CPP] (0) | 2021.12.05 |
백준, BOJ, 1120번, 문자열 : C++ [CPP] (0) | 2021.12.04 |
백준, BOJ, 1937번, 욕심쟁이 판다 : C++ [CPP] *** (0) | 2021.12.01 |