세용용용용 2023. 5. 17. 18:29

1) 첫번쨰 나의 코드

def dfs(x,y,n,count):
    if x==y: #정지조건
        return count
    elif x>y: #정지조건
        return -1
    else: #재귀함수 돌림
        add = dfs(x+n,y,n,count+1)
        mux_2 = dfs(x*2, y, n, count+1)
        mux_3 = dfs(x*3, y, n, count+1)
   
    result_list = [add, mux_2, mux_3] #3개의 값중 작은것을 골라야됨
   
    new_result_list = [] #result_list 중에서 -1인것은 제외시킴
    for i in result_list:
        if i != -1:
            new_result_list.append(i)


    if new_result_list:#만약 new_result_list 존재시 최솟값을 리턴
        return min(new_result_list)
    else:#없으면 만들수 없다는 것이기에 -1을 리턴
        return -1

def solution(x,y,n):
    answer = dfs(x,y,n,0)
    return answer
print(solution(2,5,4))

런타임 에러 .... 뭔가 단단히 잘못됨........하.......하 포기할까 .....하 

 

2) 수정 코드

def solution(x,y,n):
    answer = 0
    dp = set()
    dp.add(x)

    while dp:
        if y in dp:
            return answer
        else:
            dp_y = set()
            for i in dp:
                if i+n <= y:
                    dp_y.add(i+n)
                if i*2 <= y:
                    dp_y.add(i*2)
                if i*3 <= y:
                    dp_y.add(i*3)
            dp = dp_y
            answer+=1
    answer = -1
    #print(answer)
    return answer

solution(2,5,4)

느낀점 : 진짜 아직 너무 부족하다.....