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

프로그래머스

  • 숫자를 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,5,1,6,...
순으로 숫자를 말하면 된다.
이 게임을 이진수로 진행하는 경우에는,
0,1,1,0,1,1,1,0,0,1,0,1,1,1,0,1,1,1,...
자신이 말해야 하는 숫자를 스마트폰에 미리 출력해주는 프로그램을 만들려고 한다. 튜브의 프로그램을 구현하라.

입력형식

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

  • 2<=n<=16
  • 0<t<=1000
  • 2<=m<=100
  • 1<=p<=m

출력형식

튜브가 말해야 하는 숫자 t개를 공백 없이 차례대로 나타낸 문자열. 단, 10~15는 각각 대문자 A~F로 출력한다.

코드

NUM_CODE = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',
           6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',
           13:'D',14:'E',15:'F'}
def solution(n, t, m, p):
    answer = []
    solve(n,t,m,p,answer)
    return ''.join([NUM_CODE[x] for x in answer])

# num을 n진수로 표현(배열)
def makeNo(num, n):
    result = []
    while num >= n:
        result.append(num % n)
        num //= n
    result.append(num)
    return list(reversed(result))

def solve(n, t, m, p, answer):
    no, num, cp = 0, 0, p # 튜브가 말한 개수, 현재 숫자, p
    while True:
        cur = makeNo(num, n)
        for c in cur:
            cp -= 1
            if cp == 0:
                answer.append(c)
                if len(answer) == t:
                    return
                cp = m
        
        num += 1

좋은 웹페이지 즐겨찾기