Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

[프로그래머스 Level 2] n진수 게임 - JavaScript
연습장/프로그래머스 문제풀이

[프로그래머스 Level 2] n진수 게임 - JavaScript

2022. 6. 11. 02:07

🔗 문제 링크

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

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

programmers.co.kr

✏️ 풀이

function solution(n, t, m, p) {
    const max = m * (t - 1) + p;
    const answer = [];
    let numbers = '';
    let value = 0;
    while (numbers.length < max) {
        numbers += (value++).toString(n);
    }
    
    let i = 0;
    while (answer.length < t) {
        if (i % m + 1 === p) {
            answer.push(numbers[i]);
        }
        i++;
    }
    return answer.join('').toUpperCase();
}

규칙대로 숫자를 나열했을 때, 원하는 숫자들은 최대 m * (t - 1) + p번째 수 안에 존재한다. 따라서, 0부터 시작해서 value를 1씩 증가시키면서 value를 n진수 문자열로 바꾼 값을 길이가 m * (t - 1) + p 이상이 될 때까지 numbers에 이어붙인다.

 

그 다음, 튜브의 차례일 때 말해야 하는 숫자만 골라서 answer에 담는다. 그리고 나서 answer를 전부 이어붙이고 소문자를 대문자로 변환하면 정답을 구할 수 있다.

 

 

💡 제너레이터를 활용한 풀이

function solution(n, t, m, p) {
    const program = (function* (n) {
        let value = 0;
        while (true) {
            const numbers = [...value.toString(n)];
            for (let i = 0; i < numbers.length; i++) {
                yield numbers[i].toString().toUpperCase();
            }
            value++;
        }
    })(n);
    const output = [];
    let i = 0;
    while (output.length < t) {
        const { value } = program.next();
        if ((i++ % m) === p - 1) {
            output.push(value);
        }
    }
    return output.join('');
}

제너레이터를 활용해서 지연 평가를 하면 뭔가 메모리를 아낄 수 있다는 생각이 들어서 처음에 이렇게 풀었다. 그러나 그런 효과는 전혀 없고 오히려 시간만 더 오래 걸렸다..

저작자표시 비영리

'연습장 > 프로그래머스 문제풀이' 카테고리의 다른 글

[프로그래머스 Level 2] 타겟 넘버 - JavaScript  (0) 2022.07.04
[프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript  (0) 2022.06.13
[프로그래머스 Level 2] 파일명 정렬 - JavaScript  (0) 2022.06.11
[프로그래머스 Level 2] 압축 - JavaScript  (0) 2022.06.10
[프로그래머스 Level 2] 방금그곡 - JavaScript  (0) 2022.06.10
    '연습장/프로그래머스 문제풀이' 카테고리의 다른 글
    • [프로그래머스 Level 2] 타겟 넘버 - JavaScript
    • [프로그래머스 Level 2] k진수에서 소수 개수 구하기 - JavaScript
    • [프로그래머스 Level 2] 파일명 정렬 - JavaScript
    • [프로그래머스 Level 2] 압축 - JavaScript
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바