이렇게 게임을 진행할 경우,
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
가 주어진다.
n
<=16t
<=1000m
<=100p
<=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