처음 생각했을 땐, 가장 마지막 숫자까지 n진법으로 변환하여, 튜브가 해당하는 인덱스의 숫자만 뽑아서, 주면 된다고 생각했다. 하지만, 곰곰히 다시 생각해보니, 숫자가 크기 때문에 시간복잡도 면에서 초과가 날 것 같았다. 따라서 n진법으로 변환하였을때, 갈 수 있는 차례의 숫자를 넉넉하게 잡아주고, 변환과 동시에 해당하는 숫자를 넘겨주면서 풀었다.
// 숫자 다 뽑고, 해당하는 숫자 주면, 시간초과
// 해당하는 숫자만 배열에 넣고, join으로 리턴하자.
// 최대 숫자 length는? 16진법이 최대다,
function solution(n, t, m, p) {
var answer = '';
let numArr = [];
let count = 0;
// 나머지를 이용하기 위해서, -1을 해 주었다. 인덱스 = 차례-1이기 때문이다.
p-=1;
for(var i = 0; i<=t*m; i++){
let parseNum = i.toString(n).split('');
for(var k =0; k<parseNum.length; k++){
if(numArr.length === t){
break;
}
if(count % m == p){
numArr.push(parseNum[k].toUpperCase());
}
count++;
}
}
return numArr.join('');
}
문제가 복잡하다고 느꼈지만, 천천히 주어진 조건대로만 풀면 금방 해결될 문제였다. 제한사항을 보고 시간복잡도면에서 오래걸릴지 판단하여, 완전탐색을 사용할지, 그 외의 알고리즘을 사용할지 고민하여 적용해보자!