[프로그래머스] [3차] n진수 게임

yunu·2022년 3월 2일
0
post-thumbnail

출처: 프로그래머스 코딩 테스트 연습, [프로그래머스] [3차] n진수 게임

새로 알게된 것들

1. 파이썬으로 문자를 아스키코드로 아스키코드를 문자로 바꾸는 메서드

chr(아스키코드) # 아스키코드를 문자로 ord(문자) # 문자를 아스키코드로 

2. 몫과 나머지를 반환값으로 갖는 메서드

, 나머지 = divmod(, 나누는 값)=// 나누는 값 나머지 =% 나누는 값 

풀이

효율성검사를 하지 않는 문제로 있는 그대로 풀었다.

1. 숫자를 문자로 바꾸는 메서드와 이 메서드 안에서 사용되는 n진수를 알파벳으로 바꾸는 메서드를 만들어 준비한다.

2. 튜브가 t만큼의 숫자를 구할때까지 무한 반복문을 돈다. 튜브의 순서가 1부터 시작하여 -1을 하여 턴에서 참가인원수인 m만큼 나눈 나머지를 사용할 수 있도록 했다.

코드

def solution(n, t, m, p):
    """
    진법 = n
    미리 구할 숫자 = t
    참가 인원 = m
    튜브의 순서 = p
    """
    answer = ''

    def to_N(num):
        return chr(ord('A') + num - 10) if num < 16 and num >= 10 else str(num)

    def num_to_str(num):
        q, r = divmod(num, n) # 몫과 나머지 한번에 계산 메서드
        ret = to_N(r)
        while q > 0:
            q, r = divmod(q, n)
            ret = to_N(r) + ret
        return ret

    print(num_to_str(17))

    num, turn = 0, 1
    while t > 0:
        # print(num_to_str(num), end='')
        for v in num_to_str(num):
            if turn % m == p:
                t -= 1
                answer += v
                if t == 0: break
            turn += 1
        num += 1

    return answer

다른 사람 풀이를 보며 알게 된 점

n진수를 표현하는 방법으로 나는 인터넷으로 아스키코드 변환 메서드를 검색하면서 풀었지만 다른 사람 풀이에서는 1부터 16까지를 리스트로 만들어 여기에 알파벳을 넣어 아스키코드를 변환하지 않고 풀었다. 만약 n진수가 16까지 정해지지 않고 그 이상이였다면 나처럼해야겠지만 문제를 더 간단하게 풀때는 리스트로 캐싱해서 푸는 것이 더 효율적인 것 같다.

profile
rip

0개의 댓글