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은 기본!

반응형