새소식

⌨️ Algorithms/프로그래머스

[Python] 프로그래머스 Lv2_숫자 변환하기

2023. 6. 10. 22:41

  • -

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

 

프로그래머스

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

programmers.co.kr

 

  • 자연수 x를 y로 변환하려고 함
  • 사용할 수 있는 연산을 다음과 같음
    • x에 n을 더함
    • x에 2를 곱함
    • x에 3을 곱함
  • 자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return
  • x를 y로 만들 수 없다면 -1을 return

 

제한사항

  • 1 ≤ x ≤ y ≤ 1,000,000
  • 1 ≤ n < y

 

"""
입출력 예시)

x = 10, y = 40, n = 5 -> 2
x = 10, y = 40, n = 30 -> 1
x = 2, y = 5, n = 4 -> -1
"""

 

 

## 의사코드 ##

# 최소 연산 횟수 
# -> DP

# x+1부터 y까지 for문으로 순회

# x+n 과 x*2 중 더 작은 수부터 순회 

# i에서 n을뺀 값, i가 2로 나누어 떨어지는 경우, i가 3으로 나누어 떨어지는 경우의 DP 값 중 가장 작은 것 + 1로 업데이트

 

 

 

 

def solution(x, y, n):
    dp = [float('inf')] * (y+1)
    dp[x] = 0 
    # x+1부터 y까지 순회
    for i in range(x+1, y+1):
        # x+n 과 x*2 중 더 작은 수부터 순회 
        if i < x + n and i < x * 2:
            continue
        # i의 dp값과 i-n의 dp값 중 가장 작은 값 + 1로 업데이트
        dp[i] = min(dp[i-n]+1, dp[i])
        # i가 2로 나누어 떨어지는 경우
        # i의 dp값과 i // 2의 dp값 중 가장 작은 값 + 1로 업데이트
        if i % 2 == 0:
            dp[i] = min(dp[i], dp[i//2]+1)
        # i가 3으로 나누어 떨어지는 경우
        # i의 dp값과 i // 3의 dp값 중 가장 작은 값 + 1로 업데이트
        if i % 3 == 0:
            dp[i] = min(dp[i], dp[i//3]+1)

    return dp[y] if dp[y] != float('inf') else -1

 

 

 

 

 

 

https://sjy4388.tistory.com/m/66

 

[프로그래머스] 숫자 변환하기 (파이썬)

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

sjy4388.tistory.com

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!