스택을 이용한 문제이다. 나는 string
을 스택 방식으로 사용하여 풀었다. 주어진 문자열 크기 만큼 반복문을 돌며 answer
에 한 단어씩 push_back
을 해준. 이때 현재 단어가 bomb
의 마지막 단어와 같고 answer
의 크기가 bomb
의 크기보다 크다면 bomb
의 크기만큼 answer
의 뒤에서 부터 문자열을 추출해 비교하고 만약 같다면 지워주고 이를 반복하였다. 만약 answer
가 빈 문자열이라면 FRULA
를 출력하였다.
문제 자체는 어렵지 않았다. 다만 answer.size() - bomb.size()
이 부분에서 문제가 있었다. 이를 반복문 조건식 안에 있는 size
대신 사용하게 되면 반복문이 멈추지 않고 마이너스까지 계속 반복하게 된다. 아래 방식 말고도 size
대신에 (int)(answer.size() - bomb.size())
을 적게 되도 정상 작동하는 것으로 보아 위 식이 int
로 인식이 되지 않아 마이너스까지 돌게 되는 것으로 예상된다. 이 부분은 잘 기억해둬야 겠다.
#include <iostream>=
using namespace std;
string s, bomb;
void solution() {
string answer = "";
for (int i = 0; i < s.size(); i++) {
answer.push_back(s[i]);
if (s[i] == bomb.back() && answer.size() >= bomb.size()) {
string tmp = "";
int size = answer.size() - bomb.size();
for (int j = answer.size() - 1; j >= size; j--) {
tmp = answer[j] + tmp;
}
if (bomb == tmp) {
answer.erase(answer.size() - bomb.size(), bomb.size());
}
}
}
if (answer.empty()) {
answer = "FRULA";
}
cout << answer;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> s;
cin >> bomb;
solution();
return 0;
}