알고리즘/프로그래머스문제풀이

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

개발자 덕구🐾 2022. 10. 20. 15:25
728x90

 

 

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

 

내가 직접 풀었다!

근데 내가 만든 코드보다 다른 사람코드가 더 효율적인듯하다😂

 

 

 

 

내가 푼 코드 : 

def solution(n, t, m, p):
    answer = [0]
    ans = ''
    
    # 숫자 구하기 
    for i in range(1,(m*t)+1) :
        tmp_list = []
        while i :
            tmp = (i%n)
            if tmp >=10 :
            	# 10보다 커지면 ABCDE
                tmp_list.append(chr(tmp+55))
            else : 
                tmp_list.append(tmp)
            i = i//n
        answer.extend(tmp_list[::-1])
    
    for i in range(p-1,m*t,m) :
        ans += str(answer[i])
        if len(ans) == t : return ans

 

일단 최대 m*t만큼은 숫자를 부를테니까 

n진수로 바꾸어 answer에 넣어준다. 

 

 

이 친구들이 0부터 시작하기 때문에 answer에는 0을 하나 넣어두고 시작한다. 

n진수로 다 바뀌어지면 m명이 있을 때 p순서인 튜브가 말하는 것을 출력해야하므로 

ans에는 for을 이용해서 p-1부터 m을 간격으로 증가시킨 인덱스를 answer에서 추출해서 string으로 바꾸어 넣는다.

 

만약 ans의 길이가 t가 되면 ans를 반환하고 문제는 끝난다. 

 

 

 


 

 

 

다른 사람 코드 : 

def change(num, n):
    numbers = '0123456789ABCDEF'
    r = ''
    if num == 0:
        return '0'
    while num > 0:
        r = numbers[num % n] + r
        num = num // n
    return r

def solution(n, t, m, p):
    tmp = ''
    answer = ''
    
    for i in range(t*m):
        tmp += change(i, n)
        
    for i in range(t):
        answer += tmp[p-1+m*i]
        
    return answer

change함수를 통해서 진수로 변환새서 tmp에 붙여넣어준다. 

 

 

 

내가 푼 풀이와 비슷하긴 하다

근데 이 풀이가 더 깔끔하고 이해하기 쉽다. 

 

 

 

 

참고 블로그 : 

https://whwl.tistory.com/120

 

[프로그래머스] n진수 게임 / 파이썬 / Python / 2018 KAKAO BLIND RECRUITMENT

💡solutions ) 💬 진수 변환을 잘 몰랐는데 이번 문제 풀면서 정확히 알게 됐다. 해당 진수로 숫자를 나누며 나머지를 누적하는 방식. 💬 진수 변환 함수는 재귀로도 풀 수 있는데 이번에는 while

whwl.tistory.com

 

 

 

 

반응형