BOJ 1406. ์๋ํฐ
๐โโ๏ธ[Silver II] ์๋ํฐ - 1406
์ฑ๋ฅ ์์ฝ
๋ฉ๋ชจ๋ฆฌ: 21020 KB, ์๊ฐ: 72 ms
๋ถ๋ฅ
์๋ฃ ๊ตฌ์กฐ, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ์คํ
์ ์ถ ์ผ์
2024๋ 1์ 26์ผ 18:49:28
๋ฌธ์ ์ค๋ช
ํ ์ค๋ก ๋ ๊ฐ๋จํ ์๋ํฐ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ด ํธ์ง๊ธฐ๋ ์์ด ์๋ฌธ์๋ง์ ๊ธฐ๋กํ ์ ์๋ ํธ์ง๊ธฐ๋ก, ์ต๋ 600,000๊ธ์๊น์ง ์ ๋ ฅํ ์ ์๋ค.
์ด ํธ์ง๊ธฐ์๋ '์ปค์'๋ผ๋ ๊ฒ์ด ์๋๋ฐ, ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ์(์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์ผ์ชฝ), ๋ฌธ์ฅ์ ๋งจ ๋ค(๋ง์ง๋ง ๋ฌธ์์ ์ค๋ฅธ์ชฝ), ๋๋ ๋ฌธ์ฅ ์ค๊ฐ ์์์ ๊ณณ(๋ชจ๋ ์ฐ์๋ ๋ ๋ฌธ์ ์ฌ์ด)์ ์์นํ ์ ์๋ค. ์ฆ ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ํ์ฌ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์์ผ๋ฉด, ์ปค์๊ฐ ์์นํ ์ ์๋ ๊ณณ์ L+1๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด ํธ์ง๊ธฐ๊ฐ ์ง์ํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
L | ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) |
---|---|
D | ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ๋ค์ด๋ฉด ๋ฌด์๋จ) |
B | ์ปค์ ์ผ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ์ญ์ ํจ (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) ์ญ์ ๋ก ์ธํด ์ปค์๋ ํ ์นธ ์ผ์ชฝ์ผ๋ก ์ด๋ํ ๊ฒ์ฒ๋ผ ๋ํ๋์ง๋ง, ์ค์ ๋ก ์ปค์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ฌธ์๋ ๊ทธ๋๋ก์ |
P \$ | \$๋ผ๋ ๋ฌธ์๋ฅผ ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํจ |
์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ์ดํ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ช ๋ น์ด๊ฐ ์ํ๋๊ธฐ ์ ์ ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ๋ค์ ์์นํ๊ณ ์๋ค๊ณ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ N์ด๊ณ , ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100,000์ ๋์ง ์๋๋ค. ๋์งธ ์ค์๋ ์ ๋ ฅํ ๋ช ๋ น์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ M(1 โค M โค 500,000)์ด ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ช ๋ น์ด๋ ์์ ๋ค ๊ฐ์ง ์ค ํ๋์ ํํ๋ก๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
๐ํ์ด
์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ฌธ์ ์ด๋ค.
์ปค์๊ฐ ๋งจ ์ผ์ชฝ์ ์์๋ ์ผ์ชฝ์ผ๋ก ๋ค์ ์ปค์๋ฅผ ์ฎ๊ธฐ๋ ค๋ฉด ์๋ฌด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์์์ผํ๋๋ฐ, li.begin()์ผ๋ก๋ง ๋น๊ตํ๋ฉด ์ถํ push์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ทธ๋์ ๊ผผ์๋ก ๋งจ ์ฒ์์ li์ ์๋ฏธ์๋ ๊ฐ์ ํ๋ ์ถ๊ฐํด์ ์ด ๋ถ๋ถ์ ํด๊ฒฐํ๋ค.
string str;
int n;
list<char> li;
list<char>::iterator cursor, s;
void solve()
{
cin >> str >> n;
li.push_back('N');
for (int i = 0; i < str.size(); ++i)
{
li.push_back(str[i]);
}
cursor = li.begin();
s = li.begin();
for (int i = 0; i < str.size(); ++i)
{
cursor++;
}
char temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
if (temp == 'L')
{
// ๋งจ ์์ด๋ฉด ๋ฌด์
if (cursor != li.begin())
--cursor;
}
else if (temp == 'D')
{
// ๋งจ ๋ค๋ฉด ๋ฌด์
if (cursor != --li.end())
cursor++;
}
else if (temp == 'B')
{
// ์ปค์๊ฐ ๋งจ์์ด๋ฉด ๋ฌด์๋จ.
if (cursor != s)
{
list<char>::iterator t = cursor--;
li.erase(t);
}
}
else if (temp == 'P')
{
char newChar;
cin >> newChar;
li.insert(++cursor, newChar);
cursor--;
}
}
cursor = li.begin();
for (int i = 0; i < li.size() - 1; ++i)
{
cout << *++cursor;
}
}
๐์ ์ฒด ์ฝ๋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;
string str;
int n;
list<char> li;
list<char>::iterator cursor, s;
void solve()
{
cin >> str >> n;
li.push_back('N');
for (int i = 0; i < str.size(); ++i)
{
li.push_back(str[i]);
}
cursor = li.begin();
s = li.begin();
for (int i = 0; i < str.size(); ++i)
{
cursor++;
}
char temp;
for (int i = 0; i < n; ++i)
{
cin >> temp;
if (temp == 'L')
{
// ๋งจ ์์ด๋ฉด ๋ฌด์
if (cursor != li.begin())
--cursor;
}
else if (temp == 'D')
{
// ๋งจ ๋ค๋ฉด ๋ฌด์
if (cursor != --li.end())
cursor++;
}
else if (temp == 'B')
{
// ์ปค์๊ฐ ๋งจ์์ด๋ฉด ๋ฌด์๋จ.
if (cursor != s)
{
list<char>::iterator t = cursor--;
li.erase(t);
}
}
else if (temp == 'P')
{
char newChar;
cin >> newChar;
li.insert(++cursor, newChar);
cursor--;
}
}
cursor = li.begin();
for (int i = 0; i < li.size() - 1; ++i)
{
cout << *++cursor;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}