9935 - 문자열 폭발

재찬·2023년 2월 6일
0

Algorithm

목록 보기
45/64

문제

코드

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

string s, t;
stack<char> st;

int main(){
	cin >> s >> t;
	
	for(char c : s){
		st.push(c);
		if(st.size() >= t.size() && st.top() == t[t.size() -1 ]){
			string ss = "";
			for(char i : t){
				ss += st.top();
				st.pop();
			}
			reverse(ss.begin(), ss.end());
			if(ss != t){
				for(char a : ss){
					st.push(a);
				}
			}
		}
	}
	if(st.size() == 0) cout << "FRULA" << '\n';
	else{
		string k = "";
		while(st.size()){
			k += st.top();
			st.pop();
		}
		reverse(k.begin(), k.end());
		cout << k << '\n';
	}
}

풀이

결국엔 짝을 짓는 stack을 활용한 문제였다.
입력 받은 문자열을 stack에 하나씩 담아 top의 값이 폭발 문자열의 끝자와 같다면 check를 들어간다.
임의의 string에 stack에 들어가있는 문자를 폭발 문자열의 size만큼 꺼내온 다음
stack에 있었기에 뒤집는다.
뒤집은 값이 폭발 문자열과 같다면 그냥 둔다. 둔다는 것 자체가 문자열을 삭제한다는 의미이기 때문이다.
만약 비교해서 같지 않다면 다시 스택에 넣어준다.
마지막에 스택 size가 0이면 FRULA
아니면 stack에 있는 문자를 새로운 string에 담아서 출력한다.

결과

후기

100만이라는 제한이 있었지만 이중 for문으로 구현해버렸다. 시간 초과가 나온 뒤 stack을 사용해 봐야겠다는 생각을 하지 못해 계속 틀렸다.
오류 메시지에 자꾸 올바르지 않은 변수 사용이래서 무슨 소리인가 했는데 st와 t를 헷갈려 사용하고 있어 오류가 난 것이었다.
쓸데없이 많이 틀려버려서 조금 화난다.

0개의 댓글