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

 

프로그래머스

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

programmers.co.kr

 

 

문제 요약

- 사람들이 번갈아가면서 숫자를 하나씩 말하는 게임

- 숫자가 10 이상인 경우, 한 자리씩 끊어서 말한다. 

ex. 123 이면, 1, 2, 3 

- 특정 위치의 사람이 말해야 하는 숫자 순서대로 출력

 

입력 값

- 진법 n

- 미리 구할 숫자의 개수 t

- 게임 참여 인원 m

- 튜브 순서 p

 

풀이 방법

- 10진법 숫자를 n진법으로 변환하는 함수 구현 get_convert

- 출력 형식에서 10~15는 대문자 A~F 으로 출력해야 한다.

- 10진법 이상에서만 변환된다.

 

- 튜브가 말해야 하는 순서를 구해줘서 배열에 담는다.

- 0부터 최대 값까지 숫자를 변환해주고, 튜브가 말해야 하는 순서인 경우 출력 배열에 담아준다.

 

def get_convert(num, base):
    if num == 0:
        return 0
    
    temp = ''
    while num > 0:
        num, mod = divmod(num, base) # divmod 몫, 나머지
        if base > 10 and 10 <= mod <= 15: 
            temp += "ABCDEF"[mod % 10] # 10 ~ 15는 대문자 ABCDEF 변경
        else:
            temp += str(mod)
    return temp[::-1]

def solution(n, t, m, p): # 진법, 미리 구할 숫자의 개수, 게임 참여 인원, 튜브 순서
    answer = ''
    order = []
    numbers = []
    
    # 말해야 하는 숫자 순서
    for i in range(t):
        order.append(p+m*i)
    
    max_value = order[-1]
    idx = 1
    
    for i in range(max_value):
        change_num = str(get_convert(i, n)) # 바꾼 숫자
        
        for j in change_num:
            if idx in order:
                answer += j
            idx += 1    
    return answer

+ Recent posts