프로그래머스 - n진수 게임 (2018 KAKAO BLIND RECRUITMENT) / Level 2 / Python

Young Hun Park·2022년 9월 20일
0

문제 📋

코딩테스트 연습 - n진수 게임

풀이 📝

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진수로 변환함으로써
해결 할 수 있었다.

profile
개발자에게 유용한 지식

0개의 댓글