PS/Programmers

[Level 2] [3차] n진수 게임(Python)

삐야오 2023. 9. 6. 13:47
 

프로그래머스

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

programmers.co.kr

문제

진법 n, 미리 구할 숫자의 갯수 t, 게임에 참가하는 인원 m, 튜브의 순서 p 가 주어진다.

  • n: 진법 (2 ≦ n ≦ 16)
  • t: 미리 구할 숫자의 갯수 (0 < t ≦ 1000)
  • m: 게임에 참가하는 인원 (2 ≦ m ≦ 100)
  • p: 튜브의 순서 (1 ≦ p ≦ m)

 

 

풀이 과정

풀이 시간: 10분

알고리즘: 단순 구현

1. 변환한 숫자를 모두 합친 문자열의 길이가 최소 t * m이 될 때까지 순서대로 숫자를 n진수로 변환해 추가해준다.
2. 변환된 숫자(문자열)에서 튜브의 순서가 돌아올 때마다의 값을 출력한다.

 

시간 복잡도: O(t*m)

 

코드

# number(10진수)를 base진수로 변환하는 함수
def convert(number: int, base: int) -> str:
    """
    number: 변환할 숫자(10진수)
    base: 변환할 진수
    """
    nums = '0123456789ABCDEF'
    q, r = divmod(number, base) # 몫, 나머지
    if q == 0:
        return nums[r]
    else:
        return convert(q, base) + nums[r]

def solution(n: int, t: int, m: int, p: int) -> str:
    """
    n: 변환할 진법
    t: 미리 구할 숫자의 개수
    m: 게임에 참가하는 인원
    p: 튜브의 순서
    """
    converted_nums = ''
    i = 0 # 숫자는 0부터 시작

    # 필요한 숫자만큼 변환하여 converted_nums에 저장
    while len(converted_nums) < t * m:
        converted_nums += convert(i, n) # i를 n진수로 변환
        i += 1
    return converted_nums[p-1:t*m:m] # 튜브의 순서가 돌아올 때마다 출력