1 분 소요

사용 언어: Python3

문제

[3차] n진수 게임

풀이

나의 풀이

dic = {0:'0', 1:'1', 2:'2', 3:'3', 4:'4', 5:'5', 6:'6', 7:'7', 8:'8', 9:'9', 10:'A', 11:'B', 12:'C', 13:'D', 14:'E', 15:'F'}
def solution(n, t, m, p):
    # target을 N진수로 바꾸기
    def change(target, N):
        res = ''
        while target >= N:
            res += dic[target % N]
            target //= N
        res += dic[target]
        return res[::-1]
    
    number = '' # n진수 문자열
    i = 0
    while True: # 숫자들을 n진수 문자열 나타내기 (필요한 만큼만)
        number += change(i, n)
        if len(number) >= m * t:
            break
        i += 1
        
    ans = '' # 튜브가 말할 답
    for i in range(p - 1, t * m, m):
        ans += number[i]
    
    return ans
  • 테스트 케이스: 통과
  • 제출 결과: 통과
  • 2<=n<=16 이므로 10~15A~F로 나타내기 위해 딕셔너리로 정의하면 편하다!
  • change()라는 함수로 targetn 진수로 바꾼다.
    • 이때 위에서 정의한 딕셔너리를 사용해 10~15A~F로 나타낸다.
  • n 진수로 바꾼 문자열을 number라고 할 때, len(number)m * t 보다 작은 동안에 계속해서 0부터의 숫자들을 n진수로 바꿔 number 문자열에 이어붙인다.
  • number 문자열이 완성되었다면 for i in range(p-1, t*m, m)으로 순회하며 튜브가 말할 답을 세팅한다.

나의 풀이 (개선된 풀이)

def solution(n, t, m, p):
    arr = '0123456789ABCDEF' # ✅ 딕셔너리 대신 문자열로 나타낼 수도 있다!
    def change(target, N):
        res = ''
        while target >= N:
            res += arr[target % N] # ✅
            target //= N
        res +=  arr[target] # ✅
        return res[::-1]
    
    number = '' # n진수 문자열
    i = 0
    while True: # 숫자들을 n진수 문자열 나타내기 (필요한 만큼만)
        number += change(i, n)
        if len(number) >= m * t:
            break
        i += 1
        
    ans = '' # 튜브가 말할 답
    for i in range(p - 1, t * m, m):
        ans += number[i]
    
    return ans
  • 테스트 케이스: 통과
  • 제출 결과: 통과


💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기