[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] 를 출력한다.

너무 심플하고 훨씬 좋은 방법이다.👍