본문 바로가기
알고리즘 & PS

[Python] 2018 Kakao Blind Recruitment [3차] n진수 게임

by 다람이도토리 2021. 4. 26.

N진수! N진수!  N진수! N진수! 실제로 이걸 술게임에 쓰지말자. 마법사로 오해받는다.

카카오 2018 기출문제 - N진수 게임 (Lv 2 문제)

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

알고리즘

어렵진 않으나, 일반화는 불가능하다. 따라서 직접 구현해야 한다.
(1) 튜브가 t턴까지 말하기 충분한 숫자의 개수까지만 모두의 답을 얻어놓고,
(2) 파이썬의 슬라이싱 기능을 활용하여, 튜브의 답만 얻어버리자.

진법 계산을 별도의 함수를 통해 구현하면 코드가 간편해진다. 물론 이도 쉽게 string을 활용하여 계산 가능하다.

코드

def n_adic_convert(num, adic):
    # 0 ~ 15에 대응
    string='0123456789ABCDEF'
    n_adic_ans = ''
    if num == 0:
        return '0'
    while num > 0:
        n_adic_ans += string[num % adic]
        num = num // adic
    return n_adic_ans[::-1]

def solution(n, t, m, p):
    digit_cnt = 0
    answer = ''
    do_num = 0
    while digit_cnt < (t-1)*m+p:
        turn_ans = n_adic_convert(do_num, n)
        answer += turn_ans
        digit_cnt += len(turn_ans)
        do_num += 1
    tube_do = answer[p-1 : (t-1)*m+p+1 : m]
    
    return tube_do