임의의 위치에 삽입과 삭제가 잦은 경우, 시간복잡도 상의 이득을 위해
연결 리스트의 자료구조를 생각해보아야 한다
연결리스트는 양 끝을 제외하고는 이전 주소 값과 다음 주소 값을 가지는 노드를 가진 구조이다
C++ 의 STL list 를 이용해서 풀면 상대적으로 구현이 편하다
https://www.acmicpc.net/problem/1406
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
string start;
list<char> li;
int m;
cin >> start;
for (auto k : start)
{
li.push_back(k);
}
// 반복자 ::iterator 대신에 auto로 대체 가능하다
auto cursor = li.end();
cin >> m;
while (m--)
{
char cmd;
cin >> cmd;
if (cmd == 'L')
{
if (cursor != li.begin())
{
cursor--;
}
}
else if (cmd == 'D')
{
if (cursor != li.end())
{
cursor++;
}
}
else if (cmd == 'B')
{
if (cursor != li.begin())
{
cursor--;
// erase 함수의 리턴 값은 다음 요소의 반복자이므로
cursor = li.erase(cursor);
}
}
else // 'P'
{
char add;
cin >> add;
li.insert(cursor, add);
}
}
for (auto k : li)
{
cout << k;
}
return 0;
}
'개발 노트 > 백준, 프로그래머스 풀이' 카테고리의 다른 글
[백준 2178/c++] 미로 탐색 (0) | 2022.08.08 |
---|---|
[백준 1926/c++] 그림 (0) | 2022.08.07 |
[백준 10816/c++] 숫자 카드 2 (0) | 2022.08.05 |
[백준 9663/c++] N-Queen (0) | 2022.08.04 |
[백준 2480/python] 주사위 세개 (1) | 2022.08.04 |
댓글