알고리즘

[프로그래머스] [3차] n진수 게임

j9972 2023. 3. 28. 13:31
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/17687

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

접근

1. 문제를 보면서 떠오른 생각 " n 진법으로 p + m * idx 자리에 있는 것을 말하되, t개를 말하면 되겠다 " 

2. 10진수 -> n진수로 변경하는 함수를 만들어 준다

3. 처음 p의 자리부터 말하면 되는데, 최대 p + m * t 개까지 변환을 시켜준다

4. idx의 값을 조정하면서 ans에 넣어주면 되는데 리스트의 시작은 0임을 잊지말자 ( res[p+idx-1]에서 -1을 하는 이유 )

 

풀이

def convert(num, base): # 숫자, 진법
    temp = '0123456789ABCDEF'
    q,r = divmod(num,base)
    
    if q == 0:
        return temp[r]
    else:
        return convert(q,base) + temp[r]

def solution(n, t, m, p):
    ans = ''
    
    # 최대 m == 100, t == 1000 이면, len(res) == 100.000
    res = ''
    for i in range(p+m*t):
        res += convert(i,n)
    #print('res : ', res)
    
    idx = 0
    while t > 0:
        ans += res[p+idx-1] 
        idx += m
        t -= 1
        
    return ans