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

2022. 1. 13. 22:39·PS(Problem Solving)/C++

문제 링크

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

 

문제 정보

입력

첫째 줄에는 초기에 편집기에 입력되어 있는 문자열이 주어진다. 이 문자열은 길이가 N이고, 영어 소문자로만 이루어져 있으며, 길이는 100,000을 넘지 않는다. 둘째 줄에는 입력할 명령어의 개수를 나타내는 정수 M(1 ≤ M ≤ 500,000)이 주어진다. 셋째 줄부터 M개의 줄에 걸쳐 입력할 명령어가 순서대로 주어진다. 명령어는 위의 네 가지 중 하나의 형태로만 주어진다.

출력

첫째 줄에 모든 명령어를 수행하고 난 후 편집기에 입력되어 있는 문자열을 출력한다.

 

풀이

 연결 리스트로 해결 할 수 있는 문제다. 연결 리스트는 커서를 이용하는 문제가 주로 나온다. 따라서 메모장 같은 문제들을 풀이할 때 용이하게 사용할 수 있다! 이 문제는 STL List를 이용해서 쉽게 풀이할 수 있는데 삭제 처리가 조금 혼란스러웠다. 내가 STL List를 정리한 글에서 erase 함수를 정확하지 않게 설명한 부분이 있어 이 문제를 풀면서 수정했다. STL List의 erase 함수는 cursor가 가리키는 값을 제거하고 그 다음 원소의 위치를 반환한다. 이를 정확하게 알고 있으면 풀이할 수 있다. 아래는 내가 작성한 STL List, 연결 리스트의 개념과 사용법이다.

 [C++] 연결 리스트의 개념과 사용법

 

소스 코드

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

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	
	string str;
	cin >> str;
	
	list<char> L;
	for (auto c : str) {
		L.push_back(c);
	}
	auto cursor = L.end();
	
	int m;
	cin >> m;
	while (m--) {
		char cmd;
		cin >> cmd;
		
		if (cmd == 'P') {
			char c;
			cin >> c;
			L.insert(cursor, c);
		} else if (cmd == 'L') {
			if (cursor != L.begin()) {
				cursor--;
			}
		} else if (cmd =='D') {
			if (cursor != L.end()) {
				cursor++;
			}
		} else { // cmd == 'B'
			if (cursor != L.begin()) {
				cursor--;
				cursor = L.erase(cursor);
			}
		}
	}
	
	for (auto c : L) {
		cout << c;
	}
	
	return 0;
}

 

저작자표시 비영리 변경금지
'PS(Problem Solving)/C++' 카테고리의 다른 글
  • [백준(BOJ) 1158번] 요세푸스 문제 (C++)
  • [백준(BOJ) 5397번] 키로거 (C++)
  • [백준(BOJ) 3273번] 두 수의 합 (C++)
  • [백준(BOJ) 2577번] 숫자의 개수 (C++)
SiwonHae
SiwonHae
프로그래밍을 공부하고 있는 학생입니다.
  • SiwonHae
    시원해의 블로그
    SiwonHae
  • 전체
    오늘
    어제
    • 전체보기 (148)
      • PS(Problem Solving) (94)
        • C (25)
        • C++ (33)
        • JAVA (36)
      • Algorithm & Data Structure (13)
      • Computer Science (12)
        • Network (2)
        • Design Pattern (10)
      • Back-end (5)
        • Spring (4)
      • Front-end (1)
        • React (1)
      • JAVA (4)
      • 정보처리기사 (17)
      • SQLD (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
SiwonHae
[백준(BOJ) 1406번] 에디터 (C++)
상단으로

티스토리툴바