본문 바로가기
코딩테스트 파이썬/파이썬 프로그래머스 2단계

숫자 변환하기

by 세용용용용 2023. 5. 17.

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)

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

'코딩테스트 파이썬 > 파이썬 프로그래머스 2단계' 카테고리의 다른 글

롤케이크 자르기  (0) 2023.05.20
다리를 지나는 트럭  (0) 2023.05.20
2개 이하로 다른 비트  (0) 2023.05.16
2 x n 타일링  (0) 2023.05.15
뒤에 있는 큰 수 찾기  (0) 2023.05.15