인프런 커뮤니티 질문&답변

요가인님의 프로필 이미지
요가인

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

5-B : erase()를 이용한 풀이

5-B stack 질문있습니다

작성

·

114

0

98퍼에서 틀렸다고 뜨는데 반례를 도저히 못찾겠어서 질문 남겨봐요!

http://boj.kr/976bc09df4c24ac3bb144e15767bdf41

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 가인님 ㅎㅎ

 

저도 반례는 못찾아서 그냥 가인님 코드를 다듬어봤습니다.

이런 의미로 짠게 아닐까 싶어서요.

이렇게 해보시겠어요?

#include <bits/stdc++.h>
using namespace std;

string input, boom;
stack<char> stk;

void Check()
{ 
    stack<char> temp;
     
    bool matches = true;
    for (int i = boom.size() - 1; i >= 0; i--) {
        if (stk.empty() || stk.top() != boom[i]) {
            matches = false;
            break;
        }
        temp.push(stk.top());
        stk.pop();
    }
     
    if (!matches) {
        while (!temp.empty()) {
            stk.push(temp.top());
            temp.pop();
        }
    } 
}

int main()
{
    cin >> input >> boom;
    
    for (char c : input)
    {
        stk.push(c); 
        if (stk.size() >= boom.size() && stk.top() == boom.back()) {
            Check();
        }
    }
    
    if (stk.empty()) {
        cout << "FRULA";
    } else {
        string ret = "";
        while (!stk.empty()) {
            ret += stk.top();
            stk.pop();
        }
        reverse(ret.begin(), ret.end());
        cout << ret;
    }

    return 0;
}


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


 

요가인님의 프로필 이미지
요가인

작성한 질문수

질문하기