알고리즘/BOJ

백준 11007번 Inverse Move-to-Front Transform

꾸준함. 2018. 7. 28. 16:25

문제 링크입니다: https://www.acmicpc.net/problem/11007


문제에서는 전반적으로 Move-to-Front(MTF) transform이 어떻게 동작하는지 설명해줍니다.

간단하게 요약하자면 아래와 같습니다.

1. 인덱스를 입력받습니다.

2. 해당 인덱스에 있는 알파벳을 결과 문자열에 추가하고 문자열의 제일 앞으로 이동시킵니다.

3. 1~2번을 N번 반복합니다.


알고리즘 또한 설명대로 진행해주면 됩니다.

string을 사용할 줄 안다면 쉽게 풀 수 있는 문제였습니다!


#include <iostream>

#include <string>

using namespace std;

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0); //cin 실행속도 향상

        int test_case;

        cin >> test_case;

 

        for (int t = 0; t < test_case; t++)

        {

                 string s = "abcdefghijklmnopqrstuvwxyz";

                 string result = "";

                 int N;

                 cin >> N;

 

                 for (int i = 0; i < N; i++)

                 {

                         int idx;

                         cin >> idx;

 

                         char letter = s[idx];

                         result += letter;

 

                         //string을 나눈다

                         //0 ~ (idx - 1)

                         string temp1 = s.substr(0, idx);

                         //(idx + 1) ~ 25

                         string temp2 = s.substr(idx + 1, s.length());

                         //s 업데이트

                         s =  letter + temp1 + temp2;

                 }

                 cout << result << "\n";

        }

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 13900번 순서쌍의 곱의 합  (0) 2018.07.29
백준 11003번 최소값 찾기  (0) 2018.07.28
백준 7469번 K번째 숫자  (1) 2018.07.28
백준 10799번 쇠막대기  (0) 2018.07.28
백준 1946번 신입 사원  (0) 2018.07.28