문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 숫자들을 미리 N 진법으로 변환한 뒤, 대답 여부는 1 글자 씩 읽어서 확인했다. 
  • 튜브가 대답할 순서는 나머지를 통해서 확인했다.
# 10 이상 부터는, 한 자리씩 말하기!
# 자신이 말해야할 번호만 출력하면 됨

# n 진법으로 변환하기
def get_nbase(n: int, i: int) -> str:
    nbase = ""
    over_10 = {10 : "A", 11 : "B", 12 : "C", 13 : "D", 14 : "E", 15 : "F"}
    while i:
        q, r = divmod(i, n)
        # 초기화
        i = q
        if r in over_10:
            r = over_10[r]
        nbase += str(r)
    return nbase[::-1]
        
def solution(n, t, m, p):
    # 튜브의 대답
    answer_list = []
    # n 진법 정보
    nbase_list = ["0"]
    # 미리 n진법 숫자 구해두기
    for i in range(1, t * m):
        nbase_list.append(get_nbase(n, i))
    # N 진수 게임 시작
    cnt = 0
    for num in nbase_list:
        # 1 글자씩
        for digit in num:
            # 튜브 순서일 경우
            if cnt % m == p - 1:
                answer_list.append(digit)
            cnt += 1
            # 게임 끝
            if cnt >= t * m:
                break
        if cnt >= t * m:
            break
            
    return "".join(answer_list)