JS-algorithm/프로그래머스

[프로그래머스] N진수 게임 (javascript)

yunieyunie 2023. 7. 8. 14:42

https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

🤔 해결방법

1. 튜브가 말해야하는 숫자가 t이고 참가 인원이 m이므로 총 인원이 말해야 하는 숫자인 t * m까지 0부터 n진법으로 바꾼다.

2. 인원수인 m개씩 자르고 튜브의 순서인 p번째 것만 모아서 출력한다.

 

 

🔑 풀이

function solution(n, t, m, p) {

      //numbers = n진법으로 바꾼 수
      let numbers = '';
      let i = 0;
      while (numbers.length < (t*m)){
          let num = i.toString(n).toUpperCase();
          numbers += num; //numbers = "011011100"
          i++;
      }
      //numbers의 길이가 t*m까지 되도록 자름
      numbers = numbers.slice(0, t*m); //numbers = "01101110"

      //numbers를 m개씩 쪼개서 numbersSlice에 넣기
      let numbersSlice = [];
      for (let i = 0; i < numbers.length; i+=m) {
          numbersSlice.push(numbers.slice(i, i+m)); //numbersSlice = ["01","10","11","10"]
      }

      //p번째것만 모아서 출력
      let tubeSay = '';
      for (let j = 0; j < numbersSlice.length; j++){
          tubeSay += numbersSlice[j][p-1] //tubeSay = "0111"
      }

      return tubeSay;
  }

이번 문제는 어렵지 않은 편이라 삽질하지 않고 한 번에 풀 수 있었다.

다만 좀 더 코드를 간결하게 바꿔본다면 다음과 같겠다.

function solution(n, t, m, p) {
    let numbers = '';
    let i = 0;

    while (numbers.length < t * m) {
      numbers += (i++).toString(n).toUpperCase();
    }

    const numbersSlice = numbers.slice(0, t * m);

    let tubeSay = '';
    for (let j = p - 1; j < numbersSlice.length; j += m) {
      tubeSay += numbersSlice[j];
    }

    return tubeSay;
  }