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

참고한 블로그

 

Lv2 문제다!

 

문제이해 

p에 맞춰서 만들기 보다 t * m만큼의 수를 n진법으로 바꾼다음  m으로 나눈 나머지가 p - 1인 인덱스의 값들을 출력한 뒤(p가 말하는 숫자들을 출력해야하므로) t -1까지의 수를 최종으로 출력하면 된다 

 

1. 1부터 9까지는 정수를 넣고, 10이상인 수는 알파벳으로 바꿔서 data에 저장한다. 이제 들어온 수를 data로 이용해서 n진법으로 바꿀 것이다

2. i번째 수를 n진법으로 바꾸려면 i를 n으로 나눈 나머지에 매칭되는 수를 오른쪽으로 누적해 나간다(temp)

3. 그 값을 누적해야하므로 str_value에 누적해간다 

4. str_value에서 p가 말하는 숫자들을 반복문을 통해 answer에 옮긴 후 t개만큼만 반환하면 된다 

 

- 정답 풀이 :

def solution(n, t, m, p):
    answer = ''
    
    data = dict()
    
    for i in range(16):
        data[i] = str(i)
        if i > 9:
            data[i] = chr(i + 55)
            
    for i in range(t * m):
        temp = ''
        if i == 0:
            str_value = '0'
            continue
            
        while i > 0:
            temp = data[i % n] + temp
            i //= n
            
        str_value += temp
        
    for i in range(len(str_value)):
        if i % m == p - 1:
            answer += str_value[i]
            
    return answer[:t]

 

- 시도해본 풀이 :

50 퍼센트에서 계속 틀렸던 풀이다 

이 로직에서는 13, 16같은 10대인 수에만 적용이 된다

50을 13진법으로 표현하면 3A(11)인데, 아래 로직으로하면 30이 출력된다 

def change(number, n):
    mul = 0
    temp = number
    if n > 10 and 10 <= temp <= (n - 1):
        return chr(temp + 55)
    
    while True:
        if temp // n == 0:
            break
        mul += 1
        temp = temp // n 
        
    result = ''   
    for i in range(mul, -1, -1):
        if number // (n ** i) != 0:
            result += str(number // (n ** i))
            number -= (n ** i) * (number // (n ** i))
        else:
            result += '0'
    return result
                
            
def solution(n, t, m, p):
    changed = ''    
    number = 0
    while len(changed) < t * m :
        #숫자를 n진법 수로 변환시키기
        changed += change(number, n)
        number += 1

    changed = list(changed)
    answer = ''
    for i in range(len(changed)):
        if i % m == p - 1:
            answer += changed[i]
                        
    return answer[: t]

+ Recent posts