도비LOG(跳飛錄)

도비의 AI 엔지니어 도전기

알고리즘

[프로그래머스 N진수 게임] - Python 풀이 (LV.2)

나쁜도비 2023. 5. 8. 13:01

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

 

프로그래머스

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

programmers.co.kr

 

문제 요약

문제에서 정의하는 게임 규칙에 따라서, 숫자들을 n진법으로 변환한 뒤, 튜브의 차례가 왔을 때 어떤 것을 말해야 하는지를 리턴해야 한다.

 

 

풀이

  먼저 주어지는 수들을 n진법으로 변환해주는 함수 n_convertor를 선언해준다. 그리고 0부터 t*m-1까지의 수를  n진법으로 변환한 시퀀스를 만들어준다. 마지막으로 튜브가 말해야 하는 숫자만을 선별해준다. 

# 프로그래머스 N진수 게임 https://school.programmers.co.kr/learn/courses/30/lessons/17687
def solution(n, t, m, p):   
    def n_converter(x, n):
        # n진법에 따른 수를 출력하는 함수
        # 11진법 이상의 경우 알파벳으로 치환하여 넣어줘야 한다.
        rev_base = ''
        while x > 0:
            x, mod = divmod(x, n)
            if n > 10 and (10 <= mod <= 15):
                rev_base += "ABCDEF"[mod % 10]
            else:
                rev_base += str(mod)
     
        return rev_base[::-1]

    # 0을 미리 추가해준다.
    # total 변수에는 처음부터 끝까지 숫자를 말하는 순서가 저장된다.
    total = '0'
    for i in range(1, t*m):
        total += n_converter(i, n)
        
    # 튜브가 말해야 하는 숫자만을 선별한다.
    # p-1번째부터 시작해서 다음 m번째마다 튜브의 순서가 돌아오며, t*m 번째가 되었을 때 반복문이 종료되도록 한다.
    answer = ''
    for i in range(p-1, t*m, m):
        answer += total[i]
    return answer

n진법으로 변환해줄 때 유의해야 할 점은, 11진법 이상인 경우 10~15의 숫자를 알파벳으로 치환해서 반환해줘야 한다는 것이다.

n진법 변환 함수 구현을 익혀두면 유용하게 써먹을 수 있을 것 같다.

728x90