해결 과정
convert
: 재귀를 이용하여 진법 변환하는 함수
num
: 변환하고자 하는 숫자 base
: 진법
- 몫이 0이 아니라면 ( = 계속 나눠진다면) convert함수 돌기
solution
: 문제 해결하는 함수
test
: 0에서부터 목표하는 숫자까지 n진법으로 변환해서 문자열 리스트에 저장
- while문: answer의 길이가 t가 될 때까지 반복
- 차례가 P일 때 불러야하는 숫자를 answer에 붙이기
시행착오
- 코드가 매우 지저분하긴하지만 예시만 맞음 왜 틀렸지 -> 아.
이진법에서 십육진법까지 모든 진법으로 게임을 진행해보기로 했다.
-> 2진법이랑 16진법만 이용하는 줄 알았음..
def solution(n, t, m, p):
answer = ''
i = 0
number = 0
if n == 2:
while True:
num = list(format(number,'b'))
for idx,n in enumerate(num):
i += idx
if i % m == p-1:
answer += n
else:
continue
i += 1
number += 1
if len(answer) == t:
break
else:
while True:
num = list(format(number,'x'))
for idx,n in enumerate(num):
i += idx
if i % m == p-1:
answer += n
else:
continue
i += 1
number += 1
if len(answer) == t:
break
return answer.upper()
풀이
def convert(num, base):
temp = "0123456789ABCDEF"
q, r = divmod(num,base)
if q == 0:
return temp[r]
else:
return convert(q,base) + temp[r]
def solution(n, t, m, p):
answer = ''
test = ''
for i in range(m*t):
test += str(convert(i,n))
while len(answer) < t:
answer += test[p-1]
p += m
return answer