가치투자자

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

Problem Solving/Programmers

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

미주민 2023. 7. 12. 17:34
728x90
반응형

Programmers : n진수 게임

🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr

 

</> 이 글은 코딩테스트 대비와 알고리즘 공부를 위해 문제를 풀고 학습한 내용을 기록한 것입니다. 틀린 부분이나 추가해야 할 부분이 있다면 언제든 댓글로 남겨주세요❗️

 


💬 문제

처음 문제를 읽었을 때, "미리 구할 숫자의 개수 t"가 무엇을 의미하는지 이해하기 어려웠다.

출력 형식의 설명을 보면, m명이 돌아가면서 각자 1개씩 숫자를 말하는데, 튜브가 말해야 하는 총 숫자 개수가 t를 의미한다.

 

이 문제는  진법 변환 과  반복문 에 대해 이해하고 있다면 충분히 풀 수 있는 문제였다.

 

💬 문제 설명

  1. m명이 0부터 숫자를 하나씩 말하는 게임을 하고 있다.

    - 두 자리 이상의 숫자는 하나씩 끊어서 말한다

    - 예를 들어, 10은 11번째 사람이 1을 말하고, 12번째 사람이 0을 말한다

  2. 숫자는 2진법에서 16진법까지 n진법으로 주어진다.

    - 11~16진법에서 10~15는 알파벳으로 출력되는데, 대문자 알파벳으로 출력해준다

  3. m명 중 튜브의 순서는 p번째이며, 튜브는 총 t개의 숫자를 말해야 한다.

    - 튜브가 말해야 하는 숫자들을 하나의 문자열로 출력해야 한다

 

728x90

 


💡 입출력 예시

첫 번째 예시를 살펴보면, 총 2명이서 2진법의 숫자에서 숫자 하나씩 말한다. 이때 튜브의 순서는 1번째이며, 튜브가 총 4개의 숫자를 말해야 하므로, 2명이서 4번 말하면 8개 이상의 숫자가 주어져야 한다.

0, 1, 10, 11, 100까지 말하면 8개 이상의 숫자가 충족된다. 숫자 하나씩 말하므로 0, 1, 1, 0, 1, 1, 1, 0, 0 순으로 말하게 된다. 여기서 튜브가 언급하는 4개의 숫자는 0, 1, 1, 1이므로, "0111"을 출력해줘야 한다.

 

 

반응형

 


🔑 풀이1

  • n진법 n, 튜브가 말해야 하는 숫자 개수 t, 총 인원 m, 튜브의 순서 p가 주어진다.

  • 튜브가 t번 숫자를 언급해야 하므로, m명이 t번 언급해줘야 한다.

    - 따라서 숫자 게임에서 말해야 할 수들 num의 길이는 m x t보다 작아야 한다

    - 11진법 이상에서 10~15에 해당하는 수들은 알파벳으로 나오므로, 대문자로 바꾸어준다

  • num를 배열로 바꾸고, p번째 말하는 수를 찾아준다.

    - m명 중 p번째로 말하므로, 인덱스를 m으로 나눴을 때 나머지가 p인 경우가 튜브의 차례이다

    - 다만, 인덱스는 0번째부터 시작하므로 p-1로 해준다
  • 총 t개의 숫자만 찾아줘야 하므로, ans의 길이가 t보다 작은 경우에만 그 수를 ans에 더해준다.
function solution(n, t, m, p) {
    let num = '';
    let ans = '';

    for (let i = 0; num.length < m * t; i++) {
        num += i.toString(n).toUpperCase();
    }
    num.split('').map((item, idx) => {
        if (idx % m  === (p-1)) {
            if (ans.length < t) {
                ans += item;
            }
        }
    });
    return ans;
}

 

실행 결과와 채점 결과는 다음과 같다.

 

 

728x90
반응형