구현
해당 문제의 중요한 점은 크게 2가지 이다.
의 범위는 16 이기에 11 진수 부터 16진수까지 구할 값들을 배열에 저장하여, 나눗셈 연산을 통해 진수 값을 구한다.
현재 자신의 차례를 확인하는 방법은 현재 글자수에서 총 플레이어를 나눴을 때의 나머지 값과 와 을 나눴을 때의 나머지 값이 동일한 경우이다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
char arr[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
string go(int num, int n) {
if(num==1 || num==0) return to_string(num);
string str;
str = arr[num%n];
int d = num/n;
return (d == 0 ? "" : go(num/n, n))+str;
}
string solution(int n, int t, int m, int p) {
string answer = "";
int num = 0, idx = 1;
while(true) {
string str = go(num++, n);
for(int j=0; j<str.size(); j++) {
if((idx%m)==(p%m)) {
answer+=str[j];
if(answer.size() == t) break;
}
idx++;
}
if(answer.size() == t) break;
}
return answer;
}