https://www.acmicpc.net/problem/1406
๋ฌธ์
ํ ์ค๋ก ๋ ๊ฐ๋จํ ์๋ํฐ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ด ํธ์ง๊ธฐ๋ ์์ด ์๋ฌธ์๋ง์ ๊ธฐ๋กํ ์ ์๋ ํธ์ง๊ธฐ๋ก, ์ต๋ 600,000๊ธ์๊น์ง ์ ๋ ฅํ ์ ์๋ค.
์ด ํธ์ง๊ธฐ์๋ '์ปค์'๋ผ๋ ๊ฒ์ด ์๋๋ฐ, ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ์(์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์ผ์ชฝ), ๋ฌธ์ฅ์ ๋งจ ๋ค(๋ง์ง๋ง ๋ฌธ์์ ์ค๋ฅธ์ชฝ), ๋๋ ๋ฌธ์ฅ ์ค๊ฐ ์์์ ๊ณณ(๋ชจ๋ ์ฐ์๋ ๋ ๋ฌธ์ ์ฌ์ด)์ ์์นํ ์ ์๋ค. ์ฆ ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ํ์ฌ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์์ผ๋ฉด, ์ปค์๊ฐ ์์นํ ์ ์๋ ๊ณณ์ L+1๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด ํธ์ง๊ธฐ๊ฐ ์ง์ํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
L | ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) |
D | ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ๋ค์ด๋ฉด ๋ฌด์๋จ) |
B | ์ปค์ ์ผ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ์ญ์ ํจ (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) ์ญ์ ๋ก ์ธํด ์ปค์๋ ํ ์นธ ์ผ์ชฝ์ผ๋ก ์ด๋ํ ๊ฒ์ฒ๋ผ ๋ํ๋์ง๋ง, ์ค์ ๋ก ์ปค์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ฌธ์๋ ๊ทธ๋๋ก์ |
P $ | $๋ผ๋ ๋ฌธ์๋ฅผ ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํจ |
์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ์ดํ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ช ๋ น์ด๊ฐ ์ํ๋๊ธฐ ์ ์ ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ๋ค์ ์์นํ๊ณ ์๋ค๊ณ ํ๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ N์ด๊ณ , ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100,000์ ๋์ง ์๋๋ค. ๋์งธ ์ค์๋ ์ ๋ ฅํ ๋ช ๋ น์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ M(1 ≤ M ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ช ๋ น์ด๋ ์์ ๋ค ๊ฐ์ง ์ค ํ๋์ ํํ๋ก๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
ํ์ด
std:: list ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํ์๋ค
์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌํ ์ฐ์ต์ ์ต์ ํ๋ ๋ฌธ์ ์ธ๋ฏ
๋์ ์ปค์๊ฐ ๊ฐ ๋ฌธ์์ด ์ฌ์ด์ ์๋ค๋ ์ ์ด ์ด์ง ๊น๋ค๋ก์ ๋๋ฐ,
์ด๋ ๊ทธ๋ฅ ์ ๋นํ cursor ๊ฐ ์๊ธฐ ์ค๋ฅธ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ์ฒ๋ฆฌํด์ ํด๊ฒฐํ๋ค.
๋ค๋ง L.erase()๊ฐ ๊ฐ์ ๋ฐํํ๋ค๋ ์ฌ์ค์ ๋ชจ๋ฅด๊ณ ๋ฐ๋ก ํ์ด๋ฅผ ์งํํด์
์ด๋ฐ์ ์ค๋ฅ๊ฐ ์ข ์์๋ค
#include <iostream>
#include <list>
using namespace std;
int main() {
string input;
cin >> input;
list <char> L;
for(char c : input) L.push_back(c);
auto cursor = L.end();
int n;
cin >> n;
while (n--){
char op;
cin >> op;
if(op == 'L' && cursor != L.begin()) {
cursor--;
}
else if(op == 'D' && cursor != L.end()) {
cursor++;
}
else if(op == 'B' && cursor != L.begin()) {
cursor--; //์ผ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ์ญ์ ํด์ผํ๋ฏ๋ก
cursor = L.erase(cursor); //์ดํ ์๋์ผ๋ก ์ค๋ฅธ์ชฝ์ ๋จ์ ์์น๋ฅผ ๋ฐํ
}
else if(op == 'P') {
char extra;
cin >> extra;
L.insert(cursor, extra);
}
else {}
}
for(char c : L) cout << c;
return 0;
}
'๐ Baaaaaarking > 0x04๊ฐ - ์ฐ๊ฒฐ๋ฆฌ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํคํค ๊ธฐ์ฌํ๋ค] ๋ฐฑ์ค 1158๋ฒ : ์์ธํธ์ค ๋ฌธ์ (0) | 2022.01.06 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 5397๋ฒ : ํค๋ก๊ฑฐ (0) | 2022.01.04 |