https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14zIwqAHwCFAYD
<풀이>
1. 암호문과 명령어를 입력받는다.
2. 암호문을 명령어에 맞게 수정하고, 암호문의 처음 10개의 숫자를 출력한다.
<해법>
1. 자료구조 선택하기
=> 저는 list 자료구조를 선택하였습니다. I 명령어는 list의 splice를, D는 erase를, A는 push_back를 사용하여 구현하였습니다.
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
|
#include <iostream>
#include <list>
using namespace std;
int N;
list<int> code;
int main() {
int test_case;
int T;
T = 10;
for (test_case = 1; test_case <= T; test_case++) {
//초기화
N = 0;
code.clear();
//입력 및 해법
cin >> N;
for (int i = 0; i < N; i++) {
int num = 0;
cin >> num;
code.push_back(num);
}
cin >> N;
for (int i = 0; i < N; i++) {
char cmd;
int x, y, s;
cin >> cmd;
if (cmd == 'I') {
cin >> x >> y;
list<int> add;
for (int j = 0; j < y; j++) {
cin >> s;
add.push_back(s);
}
auto iter = code.begin();
while (x--) iter++;
code.splice(iter, add);
}
else if (cmd == 'D') {
cin >> x >> y;
auto iter = code.begin();
while (x--) iter++;
while (y--) {
iter = code.erase(iter);
}
}
else {
cin >> y;
for (int j = 0; j < y; j++) {
cin >> s;
code.push_back(s);
}
}
}
//출력
cout << "#" << test_case << " ";
for (int i = 0; i < 10; i++) {
cout << code.front() << " ";
code.pop_front();
}
cout << "\n";
}
//종료
return 0;
}
|
리스트 자료구조에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[C++] SWEA 1233 - 사칙연산 유효성 검사 (0) | 2022.12.31 |
---|---|
[C++] SWEA 1231 - 중위순회 (0) | 2022.12.31 |
[C++] SWEA 5644 - 무선 충전(2) (0) | 2022.12.24 |
[C++] SWEA 1227 - 미로2 (0) | 2022.12.24 |
[C++] SWEA 1225 - 암호생성기 (0) | 2022.12.24 |