백준 1406번 에디터 문제 풀이입니다.
문제요약
키보드로 에디터에 텍스트를 입력하듯 명령을 했을 때 최종 글자를 출력하는 문제입니다.
단, 입력 할 수 있는 경우는 '커서 좌로 1칸이동', '커서 우로 1칸이동', '백스페이스', '알파벳 입력' 4가지 입니다.
문제 접근
아래의 그림까지만 떠올리면 쉽게 풀 수 있습니다. 커서를 움직인다는 접근보다, 커서는 가만히 가운데 있고 좌우로 글자가 스택에 쌓이는 그림을 떠올릴 수 있습니다. 그러면 각 조건에서 어떻게 동작해야할지 명확히 이해할 수 있습니다.
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include <bits/stdc++.h>
#define endl '\n';
#define INF 2147483647;
#define ll long long
#define pll pair<ll, ll>
#define matrix vector<vector<ll>>
#define lcm(a, b) a *b / gcd(a, b)
ll gcd(ll a, ll b) { return (b ? gcd(b, a % b) : a); }
const ll mod = 1000000007LL;
ll a, b, c, i, j, k, n, m, t;
ll test;
ll ans = 0;
ll result = 0;
bool flag;
using namespace std;
void solve() {
string strn;
char s, command;
stack<char> left;
stack<char> right;
vector<int> v;
cin >> strn;
for (i = 0; i < strn.length(); i++) {
left.push(strn[i]);
}
cin >> n;
char tmp;
for (i = 0; i < n; i++) {
cin >> command;
if (command == 'P') {
cin >> s;
left.push(s);
} else if (command == 'L') {
if (!left.empty()) {
tmp = left.top();
left.pop();
right.push(tmp);
}
} else if (command == 'D') {
if (!right.empty()) {
tmp = right.top();
right.pop();
left.push(tmp);
}
} else {
if (!left.empty()) {
tmp = left.top();
left.pop();
}
}
}
int l_size, r_size;
l_size = left.size();
for (i = 0; i < l_size; i++) {
tmp = left.top();
left.pop();
right.push(tmp);
}
r_size = right.size();
for (i = 0; i < r_size; i++) {
tmp = right.top();
right.pop();
cout << tmp;
}
cout << endl;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
ll tc = 1;
// cin >> tc;
while (tc--) solve();
return 0;
}
|
cs |
35 line부터 한 입력씩 for 문을 돌게 되고, 각 조건별로 글자를 좌우의 stack으로 옮기면서 최종 문제열을 도출합니다.
이미지만 떠올리면 구현은 굉장히 쉬운 stack문제 였습니다.
'알고리즘' 카테고리의 다른 글
[BOJ] 백준 2493번 탑 - C++ 코드, 해설, 풀이 (0) | 2023.09.02 |
---|---|
[BOJ] 백준 6198번 옥상 정원 꾸미기 - C++ 코드, 해설, 풀이 (0) | 2023.09.02 |
[BOJ] 백준 10799번 쇠막대기 | C++ 코드, 해설, 풀이 (0) | 2023.08.29 |
[BOJ] 백준 1956번 운동 | python 파이썬 코드, 해설, 풀이 (1) | 2023.08.24 |
[BOJ] 백준 14938번 서강그라운드 | python 파이썬 코드, 해설, 풀이 (0) | 2023.08.02 |