세용용용용 2023. 5. 29. 21:06

나의 첫번쨰 코드

from itertools import product
def solution(n):
    answer = 0
    list_num = ['1','2','4']
    o_t_t_lang = []
    i=1
    while True:
        for j in product(list_num, repeat=i):
            o_t_t_lang.append(''.join(j))
            if len(o_t_t_lang) == n:
                break
        if len(o_t_t_lang) == n:
            break
        i+=1
    answer = o_t_t_lang[-1]
    #print(answer)
    return answer
solution(4)

중복순열을 사용해 문제를 풀어냈음 그러나 .... 그러어나 ㅠㅠ 시간 초과 두둥!!!! 시이이이이xxxx

수정된 코드

from itertools import product
def solution(n):
    answer = 0
    i_num=0
    while True:
        if n-(3**(i_num+1)) <= 0:
            break
        i_num+=1
        n-=3**i_num
       
    list_num = ['1','2','4']
    lang_one_two_three = []
    for i in product(list_num, repeat=i_num+1):
        lang_one_two_three.append(''.join(i))
        if len(lang_one_two_three)==n:
            break
    #print(n)
    #print(lang_one_two_three)
    answer = lang_one_two_three[n-1]
    #print(answer)
    return answer
solution(4)

2배 넘게 단축되긴 했지만 이게 아닌가 보다......

최종 코드

def solution(n):
    answer = ''
    lang_one_two_three = []

    while True:
        if n%3 == 0:
            lang_one_two_three.append('4')
            n=(n//3)-1
        else:
            lang_one_two_three.append(str(n%3))
            n=(n//3)

        if n==0:
            break
    lang_one_two_three = lang_one_two_three[::-1]
    answer = ''.join(lang_one_two_three)
    #print(answer)
    return answer
solution(6)

아 솔찍히 이걸 어케아노 ㅋㅋㅋㅋ 아닌가 아직 많이 부족한건가 ㅎ.ㅎ.ㅎㅎㅎ.ㅎㅎ