[programmers/py] [3차] n진수 게임

승민·2024년 2월 16일

알고리즘

목록 보기
56/171

[3차] n진수 게임

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

문제 설명

  • 진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.

    게임 진행

  • 숫자를 0부터 시작해서 차례대로 말한다. 첫 번째 사람은 0, 두 번째 사람은 1, … 열 번째 사람은 9를 말한다.
  • 10 이상의 숫자부터는 한 자리씩 끊어서 말한다. 즉 열한 번째 사람은 10의 첫 자리인 1, 열두 번째 사람은 둘째 자리인 0을 말한다.
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, …

풀이

  1. 정수에 따른 진수 값을 구할 함수를 만든다 (Ndigit)
  2. 진수 값을 s에 더한다.
    우리는 m명이 참가하고 t번 말할 경우만 알면되서 m*t보다 구해진 문자열의 길이가 길면 멈춘다.
  3. 구한 문자열 s에서 내가 말할 문자만 뽑고
    뽑은 문자열의 길이가 t보다 길 경우를 생각해 t만큼 잘라준다.
arr = list("0123456789ABCDEF")

def Ndigit(n, base):
    if n == 0:
        return arr[0]
    digit = []
    while n > 0:
        digit.append(arr[n % base])
        n = int(n//base)
        
    return "".join(digit[::-1])
    
def solution(n, t, m, p):
    answer = ''
    i = 0
    s = "" #
    while len(s) < m*t:
        s += Ndigit(i, n)
        i+= 1
        
    answer = s[p-1::m][:t]
    return answer

0개의 댓글