본문 바로가기
백준 문제 풀이

[백준 5397] 키로거

by $# 2020. 3. 31.

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


해설

이번 문제를 벡터로 푸실려는 분들이 많은 텐데, 아마 시간 초과 뜰 확률이 높다.

나는 시간 초과를 방지 해 원소의 삽입이 빠른 덱으로 풀었다. (다른 블로그보면 스택으로도 풀고, 리스트로도 풀고 여러 가지 방법으로 푼 거 같다.)

 

<,>,-와 같이 커서를 신경써야하기 때문에 커서를 cur로 두고 풀었다.

 

 

˙˙˙

 

소스코드

 

 

#include <iostream>
#include <deque>
using namespace std;
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
	int n; cin >> n;
	while (n--) {
		string tt; 
        cin >> tt;
		deque<char> st;
		int cur = 0;
		for (int i = 0; i < tt.size(); i++) {
			if (tt[i] == '<') {
				if (st.size() == 0 || cur==0)  continue;
				cur -= 1;
			}
			else if (tt[i] == '>') {
				if (st.size()==cur) continue;
				cur += 1;
			}
			else if (tt[i] == '-') {
				if (cur == 0) continue;
				auto it = st.begin() + cur-1;
				st.erase(it);
				if (cur == 0) continue;
				cur -= 1;
			} 
			else {
				auto it = st.begin()+cur;
				st.insert(it, tt[i]);
				cur +=1;
			}
		}
		for (int i = 0; i < st.size(); i++)
			cout << st[i];
		cout << '\n';
	}
}

 

댓글