백준 9953 문자열 폭발 (C++)

안유태·2023년 7월 4일
0

알고리즘

목록 보기
103/239
post-custom-banner

9953번: 문자열 폭발

스택을 이용한 문제이다. 나는 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;
}
profile
공부하는 개발자
post-custom-banner

0개의 댓글