관리 메뉴

Mini

백준 1406 cpp // 연결리스트 사용법 본문

Algorithm/연결리스트

백준 1406 cpp // 연결리스트 사용법

Mini_96 2023. 8. 14. 14:45

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

 

1406번: 에디터

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수

www.acmicpc.net

* 연결리스트

장점 : 삽입이 O(1) 이다.

단점 : 조회가 O(N)이다.

사용처 : 메모장 구현 등 삽입,삭제가 빈번할 때

코테키워드 : 메모장, 커서

 

*메소드 

L.insert(idx,값) // 삽입한놈 idx 반환

L.erase(idx) // 삭제한 다음놈 idx 반환

L.end() // 마지막원소 다음 idx 반환

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

string s;
int m;
list<char> L;
int main() {
	cin >> s;
	for (int i = 0; i < s.size(); ++i) {
		L.push_back(s[i]);
	}
	auto now = L.end();
	//cout << *now;

	cin >> m;
	while (m--) {
		char op;
		cin >> op;
		if (op == 'P') {
			char c;
			cin >> c;
			L.insert(now, c);	//삽입한놈 idx 반환
		}
		else if (op == 'L') {
			if (now == L.begin()) continue;
			now--;
		}
		else if (op == 'D') {
			if (now == L.end()) continue;
			now++;
		}
		else if (op == 'B') {
			if (now == L.begin()) continue;
			now--;
			now=L.erase(now);	//삭제한놈 다음 idx 반환
		}
	}

	for (auto i : L) {
		cout << i;
	}
}