[Python] 프로그래머스 - n진수 게임

728x90
반응형

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

 

코딩테스트 연습 - [3차] n진수 게임

N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0

programmers.co.kr

2018 카카오 블라인드 코딩테스트에 출제된 문제이다.

 

이 문제를 풀기위한 keyPoint는 다음과 같다.

  1. convert함수를 통해 원하는 수를 원하는 진법으로 변경해줘야 한다.

  2. 마지막 answer를 출력할땐 튜브의 차례에 해당하는 수만 뽑아낼 수 있어야 한다.

 

# 20번째 줄에서 l이 10만 이상일때 break해주는 이유: t가 1000이하이고 m이 100이하이므로

  구해야 하는 수 중 가장 큰 수는 t * m인 100000번째 수이다.

  따라서 10만이 넘어가면 더 이상 res를 구할 필요가 없다.

def solution(n, t, m, p):
    # num을 base진수로 변경해주는 convert함수
    def convert(num, base):
        T = "0123456789ABCDEF"
        q, r = divmod(num, base)
        if q == 0:
            return T[r]
        else:
            return convert(q, base) + T[r]

    answer = ''
    res = ''
    i, l = 0, 0
    while True:
        # i를 0부터 1씩 증가시켜가면서 n진수로 변환한 값을 res에 한글자씩 넣어준다.
        x = convert(i, n)
        res += x
        # n진수로 변환한 값의 길이를 l에 더해주다가 l이 10만을 초과하면 while문 탈출
        l += len(x)
        if l > 100001:
            break
        i += 1
    
    # 튜브의 순서 p-1부터 t*m-1까지 m칸씩 건너뛰며 res값을 answer에 넣어주고 answer 출력
    answer += res[p-1: t * m: m]
    return answer

(프로그래머스 level: 2)

728x90
반응형
TAGS.

Comments