[프로그래머스/Python] n진수 게임

Sujin Lee·2022년 10월 26일
0

코딩테스트

목록 보기
149/172
post-thumbnail

프로그래머스 - n진수 게임

해결 과정

  1. convert: 재귀를 이용하여 진법 변환하는 함수
  • num: 변환하고자 하는 숫자 base: 진법
  • 몫이 0이 아니라면 ( = 계속 나눠진다면) convert함수 돌기
  1. solution: 문제 해결하는 함수
  • test: 0에서부터 목표하는 숫자까지 n진법으로 변환해서 문자열 리스트에 저장
    • 최대: 참가 인원 * 미리 구해놓을 수
  • while문: answer의 길이가 t가 될 때까지 반복
    • 차례가 P일 때 불러야하는 숫자를 answer에 붙이기

시행착오

  • 코드가 매우 지저분하긴하지만 예시만 맞음 왜 틀렸지 -> 아.
    이진법에서 십육진법까지 모든 진법으로 게임을 진행해보기로 했다.
    -> 2진법이랑 16진법만 이용하는 줄 알았음..
def solution(n, t, m, p):
    answer = ''
    i = 0
    number = 0
    if n == 2:
        while True:
            num = list(format(number,'b'))
            for idx,n in enumerate(num):
                i += idx
                if i % m == p-1:
                    answer += n
                else:
                    continue
            i += 1
            number += 1
            if len(answer) == t:
                break
    else:
        while True:
            num = list(format(number,'x'))
            for idx,n in enumerate(num):
                i += idx
                if i % m == p-1:
                    answer += n
                else:
                    continue
            i += 1
            number += 1
            if len(answer) == t:
                break
        
    return answer.upper()

풀이

def convert(num, base):
    temp = "0123456789ABCDEF"
    # 몫, 나머지
    q, r = divmod(num,base)
    if q == 0:
        return temp[r]
    else:
        return convert(q,base) + temp[r]
    
def solution(n, t, m, p):
    answer = ''
    test = ''
    for i in range(m*t):
        test += str(convert(i,n))
    while len(answer) < t:
        answer += test[p-1]
        p += m
    return answer
profile
공부한 내용을 기록하는 공간입니다. 📝

0개의 댓글