5397번 키로거

최성현·2021년 3월 23일
0

백준 문제풀이

목록 보기
26/29
post-thumbnail

문제링크

코드 설명

처음에는 그냥 vector에 erase,insert로 생각없이 접근했다.
시간초과가 나고 n크기와 o(N^3) 가 된다는걸 알았다.
(erase,insert는 각각 for문 형태인걸 잊지말자)

n이 1,000,000 에 1초제한이므로 2중 for문으로도 안될것 같아서 2개의 스택을 이용해서 다시풀었다.

스택을 이용한 코드

😒시간초과 코드

#include<iostream>
#include<vector>
#include<string>
using namespace std;
vector<string> a;
vector<vector<char>> result;

int N;
vector<char> b;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	result.push_back(b);
	int m = 0;
	cin >> N;
	for (int i = 0; i < N; i++) {
		string abc;
		cin >> abc;
		a.push_back(abc);
	}
	for (int j = 0; j < N; j++) {
		int k=a[j].size();
		int cursor = 0;
		for (int i = 0; i < k; i++) {
			if (a[j][i] == '<') {
				if(cursor>0)
				cursor--;
			}
			else if (a[j][i] == '>') {
				if (cursor>=result[m].size()) continue;
				cursor++;

			}
			else if (a[j][i] == '-') {
				if (cursor == 0) continue;
				if (cursor >= result[m].size()) continue;
				if (!result[m].empty()) {
					result[m].erase(result[m].begin() + (cursor-1));
					cursor--;
				}
			}
			else {
				result[m].insert(result[m].begin() + cursor, a[j][i]);
				cursor++;
			}

		}
		m++;
		result.push_back(b);
	}
	

	int total = result.size();
	for (int i = 0; i < total; i++) {
		for (int j = 0; j < result[i].size(); j++)
		{
			cout << result[i][j];
		}
		cout << endl;
	}
	


	return 0;
}
profile
후회없이

0개의 댓글