from collections import deque
def make_n_num (decimal, n): # 10진수를 n진수로 변환
n_num = deque()
if decimal == 0:
n_num.appendleft(str(decimal))
while decimal > 0: # n으로 나눠가면서 나머지들을 queue에 왼쪽부터 넣어줌
decimal, r = divmod(decimal, n)
if r >= 10: # 나머지가 10보다 크면 16진수로 바꿔줌
r = hex(r)[2:].upper()
n_num.appendleft(str(r))
return n_num
def solution(n, t, m, p):
answer = ''
end = m * t + (p-1) # 튜브가 말해야하는 마지막 숫자
nums = [] # n진수 배열
decimal = 0
while len(nums) < end: # n진수 배열의 길이가 end가 되면 종료
nums.extend(make_n_num(decimal, n))
decimal += 1
for i in range(t): # 튜브가 말해야하는 숫자들
answer += nums[m * i + (p-1)]
return answer
어렵지 않은 문제였다.
10진수를 n진수로 변환하여 n진수 배열 n_num을 만들어주고
튜브가 말해야하는 숫자들을 index로 접근해서 anwer에 모아주었다.
n진수를 변화해주는 함수인 make_n_num() 함수에서는
10진수를 n으로 계속 나누면서
나머지를 deque 왼쪽에 넣어주는 방식으로 n진수 배열을 구성했고
11진수 이상에서 나머지가 10이상인 상황은 일괄적으로 16진수로 변환함으로써
해결 할 수 있었다.