t길이만큼의 미리 말한 문자열을 구하면 되는 문제이다. n진수로 변환한 수를 문자열에 계속 더해주고 거기서 순서에 맞게 answer에 추가해주면 된다. 크게 어렵지 않은 문제이다.
#include <string>
#include <vector>
using namespace std;
string s = "0123456789ABCDEF";
string changedNum(int n, int num) {// n진수로 변환하여 string으로 반환
string res = "";
if (num == 0) return "0";
while (num) {
res = s[num%n] + res;
num /= n;
}
return res;
}
string solution(int n, int t, int m, int p) {
string answer = "";
string str = "";
int num = 0;
// m명이 돌아가면서 말할때 t만큼의 문자를 미리 생각하려면 최소 t*m보다는 긴 문자열이어야 한다.
while (str.size() <= t * m)
str += changedNum(n, num++);
num = p-1;// 시작 순서
while (answer.size() < t) {// t개 고를때 까지
answer += str[num];// 순서에 맞게 고르고
num += m;// 다음 순서를 구한다.
}
return answer;
}