티스토리 뷰

Algorithm/BOJ

9935 문자열 폭발

henry1214 2018. 3. 8. 08:31

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



문자열과 폭발 문자열이 주어졌을 때 모든 폭발이 끝났을 때의 문자열의 상태를 출력하는 문제이다. 2개의 스택 st, temp을 둔다. 문자열을 쭉 스캔하면서 폭발 문자열의 끝과 서로 같지 않거나 st의 크기가 폭발 문자열의 크기보다 작을 때는 그냥 st에 넣어준다. 그러다가 폭발 문자열의 끝과 같은 시점에서 st에서 하나씩 빼서 temp 옮기면서 폭발 문자열 전체와 같은지 확인한다. 만약 같다면 다 옮긴 후 temp에서 없애주고 중간에 같지 않다면 다시 st로 옮겨준다. 최종으로 st에 남은 문자열이 정답이다. 스택에 역순으로 저장되어 있으므로 temp에 다 옮긴후 하나씩 빼면서 출력해주면 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
 
int main()
{
    char str[1000001],exp[37];
    scanf("%s %s",str,exp);
 
    stack<char> st,temp;
    int len1=strlen(str),len2=strlen(exp);
    for(int i=0;i<len1;i++)
    {
        if(str[i]!=exp[len2-1|| st.size()<len2-1)
        {
            st.push(str[i]);
            continue;
        }
 
        bool flag=true;
        for(int j=len2-2;j>=0;j--)
        {
            if(st.top()==exp[j])
            {
                temp.push(st.top());
                st.pop();
            }
            else
            {
                flag=false;
                break;
            }
        }
 
        if(flag)
        {
            while(!temp.empty())
                temp.pop();
        }
        else
        {
            while(!temp.empty())
            {
                st.push(temp.top());
                temp.pop();
            }
            st.push(str[i]);
        }
    }
 
    if(st.empty())
        printf("FRULA");
    else
    {
        while(!st.empty())
        {
            temp.push(st.top());
            st.pop();
        }
        while(!temp.empty())
        {
            printf("%c",temp.top());
            temp.pop();
        }
    }
 
    return 0;
}
cs


'Algorithm > BOJ' 카테고리의 다른 글

11444 피보나치 수 6  (0) 2018.03.08
2749 피보나치 수 3  (0) 2018.03.08
1406 에디터  (0) 2018.03.08
1157 단어 공부  (0) 2018.03.07
15501 부당한 퍼즐  (0) 2018.03.05
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday