Posts [BOJ 백준] 1406번 에디터 / C++
Post
Cancel

[BOJ 백준] 1406번 에디터 / C++


Contents



문제


문제를 보시려면 링크를 클릭해주세요.


풀이


연결 리스트를 사용하기 위해 STL list를 이용해 풀었습니다.

명령어 B의 경우, 왼쪽 문자를 삭제하기 위해 커서를 왼쪽으로 이동하여 삭제합니다.

이 때, 커서 오른쪽에 오는 문자는 그대로라고 했기 때문에 커서의 위치는 삭제 후에도 변함이 없어야 하므로 커서의 위치를 오른쪽으로 재이동 시켜줘야합니다.

커서를 그냥 증가시켜줘도 되지만 erase() 함수는 삭제한 원소의 다음 원소를 가리키는 iterator를 반환하기에, 아래 코드에서는 반환값을 커서에 다시 넣어줬습니다.


소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <list>
#include <string>

using namespace std;

int main(int argc, char**argv) {
	
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	string str;
	list<char> L;

	cin >> str;
	
	for(int i=0; i<str.size(); i++){
		L.push_back(str.at(i));
	}
		
	int N;
	list<char>::iterator cur = L.end();
	
	cin >> N;
	
		
	for(int i=0; i<N; i++){
		
		char c;
		cin >> c;
		
		if(c=='L'){
			if(cur!=L.begin()) cur--;
		}			
			
		else if(c=='D'){
			if(cur!=L.end()) cur++;
		}
			
		else if(c=='B'){
			if(cur!=L.begin())
				cur = L.erase(--cur);
		}
		
		else if(c=='P'){
			char s;
			cin >> s;
			L.insert(cur,s);
		}
		
	}

	for(list<char>::iterator it=L.begin(); it!=L.end(); it++){
		cout << *it;
	}

	return 0;
}



This post is licensed under CC BY 4.0 by the author.

[BOJ 백준] 1919번 애너그램 만들기 / C++

[DB 데이터베이스] 관계형 데이터 모델 (Relation Data Model)

Comments powered by Disqus.