문제

문제

programmers.co.kr/learn/courses/30/lessons/17687

 

처음 작성한 코드

def tenToWhat(num,what):
    result = []
    remain = ['A','B','C','D','E','F']
    while num:
        num, namaji = divmod(num,what)
        if namaji>=10:
            namaji-=10
            result.append(remain[namaji])
        else: result.append(str(namaji))
    return ''.join(result[::-1])

def solution(n, t, m, p):
    num = 1
    tmp = '0'
    while True:
        if len(tmp)>t*m:
        	tmp = tmp[:t*m]
            break
        tmp+= tenToWhat(num, n)
        num+=1
    answer = [tmp[i] for i in range(len(tmp)) if i%m==p-1]
    return ''.join(answer)

 

코드 리뷰 후

def tenToWhat(num,what):
    result = []
    remain = ['A','B','C','D','E','F']
    while num:
        num, namaji = divmod(num,what)
        if namaji>=10:
            namaji-=10
            result.append(remain[namaji])
        else: result.append(str(namaji))
    return ''.join(result[::-1])

def solution(n, t, m, p):
    num = 1
    tmp = '0'
    while True:
        if len(tmp)>t*m:
            break
        tmp+= tenToWhat(num, n)
        num+=1
    answer = tmp[p-1::m][:t]
    return ''.join(answer)

 

깨달은 점

  • array[a:b:c]의 사용법을 알게되었다. a부터 b까지 c의 간격만큼의 의미를 갖고있다. 사람수(m)만큼 간격을 가지면서 p-1부터 시작하면 그게 맞는 값이 answer에 저장되고 문자열로 반환하게 작성하였다.