문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/17687#
주의해야할 점은 t가 0~t까지가 아니라 튜브가 몇번 말해야하는지를 나타내는 변수이다!!
(이것 때문에 30분을 삽질함...)
divmod
와 재귀함수
를 이용하여 n진수의 str으로 반환하는 함수이다.
def convert_number(n, num):
txt = "0123456789ABCDEF" # 16진수까지의 index
quot, remain = divmod(num,n) # 몫 , 나머지
# 몫이 1 이상이라면 몫을 재귀함수로 보내고 나머지를 txt에서 찾아준다.
# 목이 0이 되면 txt에서 찾아준다.
# 결과적으로 재귀함수로 들어간 몫이 앞에 계속 붙어주면서 return을 하기 때문에 n진법으로 변환된다.
return convert_number(n, quot) + txt[remain] if quot else txt[remain]
# 진수 변환
def convert_number(n, num):
txt = "0123456789ABCDEF"
quot, remain = divmod(num,n)
return convert_number(n, quot) + txt[remain] if quot else txt[remain]
# 튜브의 인덱스 리스트
def make_tube_index(m, p, tube_max):
tube_index = [i for i in range(p-1, tube_max, m)]
return tube_index
def solution(n, t, m, p):
answer = '' # 최종답
converted = '' # n진수로 변환되어 쭉 나열된 str
tube_max = m*t # 튜브의 마지막 인덱스
# 최종 인덱스 범위까지 포함하는 converted
i = 0
while len(converted)-1 < tube_max:
converted += convert_number(n,i)
i+=1
# 튜브가 말하는 인덱스
tube_index = make_tube_index(m,p,tube_max)
# 튜브의 순서에 맞는 것만 answer에 추가
for i in tube_index:
answer += converted[i]
return answer