[Level2] n진법게임
n진법게임
나의 풀이
function solution(n, t, m, p) {
// n : 진법
// t : 갯수
// m : 인원
// p : 순서
let i = 0;
let store = [];
let answer = "";
let cnt = 0;
let target;
while (t > 0) {
store.push(...i.toString(n).split(""));
if (answer == "" && store.length >= p) {
answer += store[p - 1] + "";
t--;
cnt++;
}
target = p + m * cnt;
if (store.length >= target) {
answer += store[target - 1] + "";
t--;
cnt++;
}
i++;
}
answer = answer.replace(/[a-z]/g, (s) => s.toUpperCase());
return answer;
}
while 문으로 t 개수를 모두 채울 때까지 반복하며,
n진수를 split하여 저장해놓은 store의 갯수가 내가 찾아야할 target(index)보다 크다면,
answer에 저장한다.
best 코드
function solution(n, t, m, p) {
var tubeT = Array.apply(null, Array(t)).map((a, i) => i * m + p - 1);
var line = "";
var max = m * t + p;
for (var i = 0; line.length <= max; i++) {
line += i.toString(n);
}
return tubeT
.map((a) => line[a])
.join("")
.toUpperCase();
}
미리 구해야할 인덱스를 tubeT라는 배열에 넣는다.
line의 길이가 maxIndex가 될 때까지 line에 n을 추가한다.
tubeT 배열의 값 === line[index] 를 출력한다.
너무 심플하고 훨씬 좋은 방법이다.👍