알고리즘/SW Expert Academy
1228.암호문1
IMyoungho
2020. 3. 29. 18:07
이번에 풀 문제는 Sw expert의 1228 암호문1이다.
이 문제는 STL list 사용법을 익히는데 도움이 되었던 것 같다.
생각보다 오래걸렸고 그 이유는 입력받는 부분에서 헤맸다..;;
또한 구현 시에 입력하는 방법에 대해서도 생각을 다시해보게 되었다.
입력을 구현하는 것도 굉장히 중요하다는 것을 깨달았다.
< Code 설명 >
#include <iostream>
#include <list>
using namespace std;
int main() {
for(int e=1; e<=10; e++ ){ // 테스트 케이스가 10개
list<int> ans; // 암호문 리스트를 생성해주자
int n; // 암호문 길이
cin >> n; // 입력
for(int i=0; i<n; i++){ // 첫 번째 정수는 원본 암호문 길이
int a; // 암호문 변수
cin >> a; // 하나씩 받아서
ans.push_back(a); // list에 넣어준다
}
int m; // 명령어 갯수
cin >> m; // 입력
for(int i=0; i<m; i++){ // 명령어 길이만큼 입력받기
char b; // 명령어를 나누는 기준 '|' 변수
cin >> b; // 입력받아서 다음 걸 받도록 하자
int x, y; // 명령어가 삽입될 위치와 길이
cin >> x >> y; // 입력
list<int>ans2; // 명령어가 저장될 리스트
for(int j=0; j<y; j++){ // 명령어 길이만큼 입력
int c; // 명령어 변수
cin >> c; // 하나씩 입력받아서
ans2.push_back(c); // 명령어 리스트에 저장
}
list<int>::iterator it = ans.begin(); // 암호문 시작을 나타내는 iter
for(int k=0; k<x; k++) // 삽입할 위치만큼 iterator를 옮기기 위함
it++; // 옮김
ans.splice(it,ans2); // 암호문 리스트의 iter 위치에 명령어 리스트 삽입
}
cout <<endl;
cout << '#' << e << " ";
for(int z=0; z<10; z++){ // 암호문 10개만 출력하면 되므로
cout << ans.front() << " "; // 암호문 제일 앞에서 부터 출력
ans.pop_front(); // 출력한 건 pop으로 빼줌
}
cout << endl;
}
return 0;
}
반드시 알아야할 TIP!!
# 입력받는 것도 잘 생각하고 받자!
# list 사용법 등 STL은 기본!
반응형