기술 블로그

9935번 문자열 폭발 본문

알고리즘 문제/BOJ

9935번 문자열 폭발

parkit 2022. 4. 24. 14:51
728x90
반응형

https://www.acmicpc.net/problem/9935

 

 

stack을 활용한다.

 

1. 입력받은 문자열을 활용하여, for문을 수행한다.

입력받은 문자열의 문자를 stack에 push한다.

 

2. 현재 for문의 문자가 폭발 문자열의 마지막 문자와 같은지 비교한다.

 

3. 같으면, 위의 1번 stack에 담긴 문자를 하나씩 비교한다.

 

 

 

#include <bits/stdc++.h>

using namespace std;

int len;
string s, t;
stack<char> st;

int main()
{
    cin.tie(0);
    
    cin >> s >> t;
    len = t.length();

    for (auto c : s) {
        st.push(c); // 입력받은 문자열을 for문 돌려준다

        // 현재 문자와 폭발문자열의 마지막 문자가 같으면
        if (c == t[len - 1] && st.size() >= len) {
            bool bomb = true;
            stack<char> temp;

            // stack을 돌면서 같으면 삭제, 같지 않으면 bomb에 false로 표시
            for (int j = len - 1; j >= 0; j--) {
                if (st.top() != t[j]) {
                    bomb = false;
                    break;
                }

                // 지운 문자를 임시 stack에 저장
                temp.push(st.top());
                st.pop();
            }

            // 폭발하지 않으면
            if (!bomb) {
                // 위의 st stack에서 지운 문자를 다시 st stack에 push
                while (!temp.empty())
                {
                    st.push(temp.top());
                    temp.pop();
                }
            }
        }
    }

    vector<char> v;

    // 출력
    if (st.empty()) {
        printf("FRULA\n");
    }
    else {
        while (!st.empty())
        {
            v.push_back(st.top());
            st.pop();
        }

        int vc = v.size();
        for (int i = vc - 1; i >= 0; i--) {
            printf("%c", v[i]);
        }

        printf("\n");
    }

    return 0;
}

 

 

 

 

 

 

 

 

 

728x90
반응형

'알고리즘 문제 > BOJ' 카테고리의 다른 글

2138번 전구와 스위치  (0) 2022.05.03
17471번 게리맨더링  (0) 2022.04.27
15683번 감시  (0) 2022.03.09
2660번 회장뽑기  (0) 2022.02.06
11000번 강의실 배정  (0) 2021.09.14