Posts 알고리즘 - 1228. [S/W 문제해결 기본] 암호문(1)
Post
Cancel

알고리즘 - 1228. [S/W 문제해결 기본] 암호문(1)

SW Expert Academy 의 1228번 - 암호문1 문제입니다.


  • 난이도 : 1~1.5

문제 조건

  • 총 10개의 테스트 케이스가 주어진다.
  • 한 개의 테스트 케이스 당 총 네 줄의 입력값이 존재한다.
    • 첫번째 줄 : 원본 암호문 길이 N (10<=N<=20, N은 정수)
    • 두번째 줄 : 원본 암호문
    • 세번째 줄 : 명령어 갯수 (5<=N<=10, N은 정수)
    • 네번째 줄 : 명령어 모음
  • 0~999999 사이의 수를 나열해서 암호문을 만드는데, 네번째 줄의 삽입 명령어에 따라 원래의 암호문 중간 중간에 숫자를 삽입하여 암호문을 수정합니다.
    • 원래 암호문을 list 자료구조에 담고, 명령어에 있는 숫자 리스트들을 원래 암호문 list에 삽입하면 되는 문제입니다.

Input

첫 줄에는 테스트 케이스 번호, 그 다음 네 줄에는 원본 암호문 길이, 원본 암호문, 명령어 갯수, 명령어 모음이 주어집니다.

Output

수정된 암호문의 처음 10개 항을 출력합니다.


생각한 아이디어

C++의 STL에 있는 list 자료구조를 사용하면 어렵지 않게 풀 수 있었습니다.


소스코드

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
#include <iostream>
#include <list>
using namespace std;

int main() {

	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, cnt, input;
	int I, x, y;
	char ch;

	for (int T = 1; T <= 10; T++) {

		cin >> N; cin.get(ch);
		list<int> li;

		for (int i = 0; i < N; i++) {
			cin >> input;
			li.push_back(input);
		}
		cin.get(ch); cin >> cnt; cin.get(ch);

		list<int>::iterator iter; // 리스트에 저장된 원소 순회를 위한 반복자 선언
		list<int> li2; // 추가로 삽입할 임시 리스트를 저장하기 위한 공간

		for (int j = 0; j < cnt; j++) {
			iter = li.begin();
			cin >> ch;
			cin >> x;
			cin >> y;

			for (int k = 0; k < y; k++) {
				cin >> input;
				li2.push_back(input);
			}
			for (int m = 0; m < x; m++) 
				iter++;	

			li.splice(iter, li2); // li 리스트의 iter가 가리키는 위치에 li2의 모든 원소 삽입
		}

		cout << "#" << T << " ";
        
		iter = li.begin();
		for (int n = 0; n < 10; n++) {
			cout << *(iter++) << " ";
		}
		cout << "\n";

	}

}

알고리즘 - 1226. [S/W 문제해결 기본] 미로찾기 문제(1)

자료구조 - Tree의 개념과 용어