문제 링크입니다: 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 |