본문 바로가기
PS(Javascript)

[프로그래머스] Lv2 n진수 게임

by 같이긍뱅와 2023. 7. 9.

문제

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

풀이

튜브가 말해야할 숫자를 구해서 한문자열로 합쳐서 리턴을 한다.

  1. 먼저 튜브가 말해야할 숫자를 담는 배열(answer)을 선언한다.
  2. 그리고 n진수로 바꾼 숫자 하나하나를 담을 배열(tmp)에 하나 선언해준다.
  3. 그 다음 차례로 지금 몇번째 사람이 말한 차례인지 나타내는 변수(i)와 n진수로 바꿀 숫자 변수(num)를 초기화해준다.
  4. 튜브가 말해야할 숫자 t개를 구할 때까지 반복문을 돌려준다.
  5. 만약 tmp의 길이가 0이라면 이미 한 n진수의 각 자리수를 모두 말한 것이 된다.
  6. 그래서 다시 num을 n진수를 각 자리수로 split한 배열로 tmp를 초기화해주고 num은 1증가시킨다.
  7. nowNum을 선언해서 현재 n진수의 어디까지 왔는지 체크하는 변수를 선언해준다.
  8. 그리고 i가 p와 같다면 즉 튜브가 말할 차례라면 선언해둔 nowNum을 answer배열에 푸쉬해준다.
  9. 차례를 나태는 i는 숫자 한자리수를 체크할 때마다 1씩 증가시켜주고
  10. i 가 m보다 크면 그러니까 한바퀴 다 돌았으면 i는 다시 1로 만들어 준다.

코드

function solution(n, t, m, p) {
    var answer = [];
    let tmp = [];
    let i = 1;
    let num = 0;
    while(answer.length !== t) {
        if(!tmp.length) {
            tmp = num.toString(n).split('');
            num++;
        }
        const nowNum = tmp.shift();
        if(i === p) answer.push(nowNum);
        i++;
        if(i > m) i = 1;
    }
    return answer.map(v => v.toUpperCase()).join('');
}

댓글