간단한 진수 변환 문제이다.
16진수 까지 있기 때문에 10이 넘어가는 것들은 A부터 되도록 해 줘야 한다.
문자열의 길이는 m명이 t번 반복할 수 있을 만큼만 있으면 되므로 mxt 만큼으로 해 준다.
그리고 본인의 차례는 p번째가 m명마다 돌아오므로 p + m(n-1)이 된다.
코드
#include <string>
#include <vector>
#include <iostream>
using namespace std;
string change(int num, int n){
string str = "";
while(1){
if(num == 0)
break;
char c;
if(num%n <= 9)
c = '0' + num%n;
else{
c = 'A' + ((num%n)-10);
}
str = c + str;
num /= n;
}
return str;
}
string solution(int n, int t, int m, int p) {
string answer = "";
string str = "";
str += '0';
for(int i=1;;i++){
str += change(i,n);
if(str.size() >= m*t)
break;
}
for(int i=0;i<t;i++){
answer += str[i*m + p - 1];
}
return answer;
}
출처 : https://programmers.co.kr/learn/courses/30/lessons/17687