Deff_Dev

[백준] 에디터 (C++) 본문

코딩테스트/백준

[백준] 에디터 (C++)

Deff_a 2024. 12. 16. 11:31

문제

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

 

풀이

이 문제는 에디터에 입력된 문자열과 명령어들을 토대로 최종 문자열을 출력하는 문제이다.

 

List를 이용하여 해당 문제를 풀이했다.

 

입력된 문자열을 Char 형식의 List에 저장하고 cursor를 List의 마지막 위치로 저장한다.

이후, 명령어를 입력하고, 입력된 명령어에 따라 명령을 수행한다.

 

else if (c == 'B')
{
	if (cursor != editor.begin()) {
		cursor--;
		cursor = editor.erase(cursor);
	}
}

 

여기서 문자를 삭제할 때, cursor에 erase 반복자를 저장하는 이유 ?

  • cursor 위치의 값을 삭제한다면 cursor는 유효하지 않은 노드를 가르키고 있기 때문에 삭제된 요소 다음 위치를 가리키는 새로운 반복자를 저장해야한다.

[전체 코드]

#include <iostream>
#include <string>
#include <list>

using namespace std;

int main() {

	ios_base::sync_with_stdio(0);
	cin.tie(0);

	string input;
	int n;
	cin >> input >> n;

	list<char> editor;
	for (int i = 0; i < input.length(); i++) {
		editor.push_back(input[i]);
	}
	auto cursor = editor.end();

	for (int i = 0; i < n; i++) {
		char c;
		cin >> c;

		if (c == 'P') {
			cin >> c;
			editor.insert(cursor, c);
		}
		else if (c == 'L') {
			if (cursor != editor.begin()) cursor--;
		}
		else if (c == 'D')
		{
			if (cursor != editor.end()) cursor++;
		}
		else if (c == 'B')
		{
			if (cursor != editor.begin()) {
				cursor--;
				cursor = editor.erase(cursor);
			}
		}
	}

	for (auto c : editor) {
		cout << c;
	}

	return 0;
}

'코딩테스트 > 백준' 카테고리의 다른 글

[백준] 1874번 스택 수열 (C++)  (0) 2024.12.17
[백준] 10773번 제로 (C++)  (0) 2024.12.17
[백준] 키로거 (C++)  (0) 2024.12.15
[백준] 13300번 방 배정 (C++)  (3) 2024.12.03
[백준] 3273번 두 수의 합 (C++)  (0) 2024.12.03