ใ๋ชฉ์ฐจใ
0. ๊ฐ์
1. ๋ฌธ์
2. ํ์ด
3. ์ฝ๋
0. ๊ฐ์
์๋ฃ๊ตฌ์กฐ, ์คํ, ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ฌธ์ . STL list์ ํด๋น iterator๋ฅผ ๋ค๋ฃฐ ์ค ์๋ฉด ์ฝ๊ฒ ํ ์ ์๋ค.
1. ๋ฌธ์
https://www.acmicpc.net/problem/1406
๋ฌธ์
ํ ์ค๋ก ๋ ๊ฐ๋จํ ์๋ํฐ๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋ค. ์ด ํธ์ง๊ธฐ๋ ์์ด ์๋ฌธ์๋ง์ ๊ธฐ๋กํ ์ ์๋ ํธ์ง๊ธฐ๋ก, ์ต๋ 600,000๊ธ์๊น์ง ์ ๋ ฅํ ์ ์๋ค.
์ด ํธ์ง๊ธฐ์๋ '์ปค์'๋ผ๋ ๊ฒ์ด ์๋๋ฐ, ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ์(์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์ผ์ชฝ), ๋ฌธ์ฅ์ ๋งจ ๋ค(๋ง์ง๋ง ๋ฌธ์์ ์ค๋ฅธ์ชฝ), ๋๋ ๋ฌธ์ฅ ์ค๊ฐ ์์์ ๊ณณ(๋ชจ๋ ์ฐ์๋ ๋ ๋ฌธ์ ์ฌ์ด)์ ์์นํ ์ ์๋ค. ์ฆ ๊ธธ์ด๊ฐ L์ธ ๋ฌธ์์ด์ด ํ์ฌ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์์ผ๋ฉด, ์ปค์๊ฐ ์์นํ ์ ์๋ ๊ณณ์ L+1๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด ํธ์ง๊ธฐ๊ฐ ์ง์ํ๋ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ๋ค.
L : ์ปค์๋ฅผ ์ผ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) |
D : ์ปค์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ํ ์นธ ์ฎ๊น (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ๋ค์ด๋ฉด ๋ฌด์๋จ) |
B : ์ปค์ ์ผ์ชฝ์ ์๋ ๋ฌธ์๋ฅผ ์ญ์ ํจ (์ปค์๊ฐ ๋ฌธ์ฅ์ ๋งจ ์์ด๋ฉด ๋ฌด์๋จ) ์ญ์ ๋ก ์ธํด ์ปค์๋ ํ ์นธ ์ผ์ชฝ์ผ๋ก ์ด๋ํ ๊ฒ์ฒ๋ผ ๋ํ๋์ง๋ง, ์ค์ ๋ก ์ปค์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋ฌธ์๋ ๊ทธ๋๋ก์ |
P $ : $๋ผ๋ ๋ฌธ์๋ฅผ ์ปค์ ์ผ์ชฝ์ ์ถ๊ฐํจ |
์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๊ณ , ๊ทธ ์ดํ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์ฐจ๋ก๋ก ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ช ๋ น์ด๊ฐ ์ํ๋๊ธฐ ์ ์ ์ปค์๋ ๋ฌธ์ฅ์ ๋งจ ๋ค์ ์์นํ๊ณ ์๋ค๊ณ ํ๋ค.
[์ ๋ ฅ]
์ฒซ์งธ ์ค์๋ ์ด๊ธฐ์ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง๋ค. ์ด ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ N์ด๊ณ , ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ธธ์ด๋ 100,000์ ๋์ง ์๋๋ค. ๋์งธ ์ค์๋ ์ ๋ ฅํ ๋ช ๋ น์ด์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ M(1 ≤ M ≤ 500,000)์ด ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ M๊ฐ์ ์ค์ ๊ฑธ์ณ ์ ๋ ฅํ ๋ช ๋ น์ด๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ๋ช ๋ น์ด๋ ์์ ๋ค ๊ฐ์ง ์ค ํ๋์ ํํ๋ก๋ง ์ฃผ์ด์ง๋ค.
[์ถ๋ ฅ]
์ฒซ์งธ ์ค์ ๋ชจ๋ ๋ช ๋ น์ด๋ฅผ ์ํํ๊ณ ๋ ํ ํธ์ง๊ธฐ์ ์ ๋ ฅ๋์ด ์๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.
[์์ ์ ๋ ฅ 1]
abcd
3
P x
L
P y
[์์ ์ถ๋ ฅ 1]
abcdyx
[์์ ์ ๋ ฅ 2]
abc
9
L
L
L
L
L
P x
L
B
P y
[์์ ์ถ๋ ฅ 2]
yxabc
[์์ ์ ๋ ฅ 3]
dmih
11
B
B
P x
L
B
B
B
P y
D
D
P z
[์์ ์ถ๋ ฅ 3]
yxz
2. ํ์ด
[์ปค์์ ์์น]
abc ๋ผ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ, ^a^b^c^ ์์ ^๊ฐ ์ปค์๊ฐ ์์นํ ์ ์๋ ์๋ฆฌ์ด๋ค.
[Iterator]
list์ iterator๋ ++ ์ฐ์ฐ๊ณผ -- ์ฐ์ฐ๋ง์ ์ง์ํ๋ค.
์ด๋ ์ฃผ์ํ ์ ์, li.erase(iter)๋ iter๊ฐ ๊ฐ๋ฆฌํค๋ ์์๋ฅผ ์ญ์ ํ ํ, ์ญ์ ํ ์์์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ iterator๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์, li.erase(--it); ๊ฐ ์๋ it = li.erase(--it); ๋ฅผ ํตํด it๊ฐ์ ์
๋ฐ์ดํธ ํด์ฃผ์ด์ผ๋ง ์ฝ๋๊ฐ ์ ์ ์๋ํ๋ค.
3. ์ฝ๋
#include <iostream>
#include <string>
#include <list>
using namespace std;
int main(int argc, char* argv[]) {
/* Faster */
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
/* Init & Input */
list<char> li;
list<char>::iterator it = li.end();
string str; cin >> str;
for (int i = 0; i < str.size(); i++)
li.push_back(str[i]);
/* Command */
int m; cin >> m;
for (int i = 0; i < m; i++) {
/* Input */
char c; cin >> c;
switch (c) {
/* L */
case 'L': {
if (it == li.begin()) continue;
it--;
break;
}
/* D */
case 'D': {
if (it == li.end()) continue;
it++;
break;
}
/* B */
case 'B': {
if (it == li.begin()) continue;
it = li.erase(--it);
break;
}
/* P */
case 'P': {
char ch; cin >> ch;
li.insert(it, ch);
break;
}
}
}
/* Output */
for (auto i : li)
cout << i;
/* Return */
return 0;
}
/*
[์ปค์์ ์์น]
abc ๋ผ๋ ๋ฌธ์์ด์ด ์ฃผ์ด์ง ๊ฒฝ์ฐ,
^a^b^c^ ์์ ^๊ฐ ์ปค์๊ฐ ์์นํ ์ ์๋ ์๋ฆฌ์ด๋ค.
li.erase(iter)๋ iter๊ฐ ๊ฐ๋ฆฌํค๋ ์์๋ฅผ ์ญ์ ํ ํ,
์ญ์ ํ ์์์ ๋ค์ ์์๋ฅผ ๊ฐ๋ฆฌํค๋ iterator๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์, li.erase(--it); ๊ฐ ์๋
it = li.erase(--it); ๋ฅผ ํตํด it๊ฐ์ ์
๋ฐ์ดํธ ํด์ฃผ์ด์ผ ํ๋ค.
*/
'ใโจ๏ธแดsใPS > ๋ฐฑ์ค_์๋ฃ๊ตฌ์กฐ[DS]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon/๋ฐฑ์ค][1966][C/C++] ํ๋ฆฐํฐ ํ (0) | 2023.05.03 |
---|---|
[Baekjoon/๋ฐฑ์ค][2164][C/C++] ์นด๋2 (0) | 2023.05.03 |
[Baekjoon/๋ฐฑ์ค][18258][C/C++] ํ 2 (0) | 2023.05.03 |
[Baekjoon/๋ฐฑ์ค][10845][C/C++] ํ (0) | 2023.05.03 |
[Baekjoon/๋ฐฑ์ค][1991][C/C++] ํธ๋ฆฌ ์ํ (0) | 2023.05.03 |