n진수를 순서대로 부르는 문제로 이해하고 풀고 있었는데 한자리씩 부르는 문제였다.
num%n이 10이라면 -10을 하여 overTen의 0번인 'A'가 들어간다
overTen = ['A','B','C','D','E','F'] if num%n > 9: res= overTen[num%n-10]+res else: res=str(num%n)+res
10진수가 넘어가면 10 ~ 16까지 A ~ F로 표현하기 때문에 이를 바꿔 줄 리스트를 작성해두고 진수 변환 과정에서 10이 넘어간다면 변환되도록 하였다.
반복할 횟수는 (자신이 발표할 횟수*사람의 수)만큼 반복한다.
자신의 순서의 범위는 (자신의 순서-1)부터 (문자열의 길이)까지 반복하되 (자신의 순서) 스텝만큼 이동한다.
overTen = ['A','B','C','D','E','F']
def change(num,n):
res=''
while num!=0:
tmp = num%n
if tmp > 9: res= overTen[tmp-10]+res # ①
else: res=str(tmp)+res
num =num//n
return res
def solution(n, t, m, p):
answer = ''
# 정해진 길이만큼 n진수 만들기
game,num='0',1
while len(game)<t*m: # ②
game+=change(num,n)
num+=1
# 자신의 순서에 나올 문자 찾기
for i in range(p,t*m+1,m): # ③
answer+=game[i-1]
return answer