진수 구하는 문제
curNum
을 하나씩 더하면서 n
진수로 바꿔주는데, 모든 문자열을 all
에 넣는다.m
명 있는 데서 t
개를 구하려면 최소 m*t
개의 문자가 있어야하기 때문에 all.size()
가 m*t
보다 클 때까지 반복한다.n
진수로 바꿔주기 위해서 최대 16진법이기 때문에 배열 c
에 0
부터 F
까지 넣어주었고, num%n
했을 때 나오는 숫자가 c
의 인덱스 숫자이다. num<=0
가 될 때 까지 반복해주고 reverse
해서 return한다.turn
은 몇 번째 차례인지 알려주는 변수이다. turn*m+p-1
은 turn
차례일 때 내가 말해야하는 숫자의 인덱스이다. -1
을 해주는 이유는 순서가 1번째부터(0번째가 아닌) 시작되기 때문이다.turn++
해주면서 answer.size()
가 t
가 될 때까지 반복한다.#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
string jinsu(int n, int num)
{
char c[]="0123456789ABCDEF";
string s = "";
while(num>0)
{
s+=c[num%n];
num/=n;
}
reverse(s.begin(), s.end());
return s;
}
string solution(int n, int t, int m, int p) {
string answer = "";
int curNum = 1;
string all="0";
while(1)
{
if(all.size()>=t*m) break;
all += jinsu(n,curNum);
curNum++;
}
int turn = 0;
while(1)
{
if(answer.size()==t) break;
answer+=all[turn*m+p-1];
turn++;
}
return answer;
}