자기 차례의 숫자를 말하면 되는 문제이다. 1부터 수가 증가하는데, 두 자리 수 이상이 되면 수를 떨어뜨려서 말해야 한다. 근데 이걸 최대 16진수 버전으로 한다 했을 때, 말해야 하는 수(문자)를 모두 구해놓자.
def de2n(num: int, base: int) -> str:
"""
n을 base진수로 변환하는 메서드
이 떄 base는 최대 16이다.
"""
if num == 0:
return "0"
result = ""
while num > 0:
rem = num % base
num //= base
if rem == 15: # 최대 16진수 알파벳 처리 로직
result += "F"
elif rem == 14:
result += "E"
elif rem == 13:
result += "D"
elif rem == 12:
result += "C"
elif rem == 11:
result += "B"
elif rem == 10:
result += "A"
else:
result += str(rem)
return result[::-1]
def solution(n: int, t: int, m: int, p: int) -> str:
"""
n : 변환할 진수
t : 미리 구할 숫자의 갯수
m : 게임에 참가하는 인원
p : 튜브의 순서
"""
tmp = ""
num = 0
while len(tmp) < (m * t): # 튜브 순서가 t번 돌 수 있을 때까지
tmp += de2n(num, n) # n진수로 변환하여 이어붙임
num += 1
return tmp[p - 1 :: m][:t] # 오버하는 경우 t개까지만 출력
🙏 문제 접근 방법 및 코드에 대한 피드백과 질문은 환영입니다!
본 문제의 다른 풀이 및 피드백, 전체 문제 풀이 순서는 위 알고리즘 스터디 Repository에서도 확인 가능합니다.