자연수 x
를 y
로 변환하려고 합니다. 사용할 수 있는 연산은 다음과 같습니다.
x
에 n
을 더합니다x
에 2를 곱합니다.x
에 3을 곱합니다.자연수 x
, y
, n
이 매개변수로 주어질 때, x
를 y
로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수를 완성해주세요. 이때 x
를 y
로 만들 수 없다면 -1을 return 해주세요.
x
≤ y
≤ 1,000,000n
< y
x | y | n | result |
---|---|---|---|
10 | 40 | 5 | 2 |
10 | 40 | 30 | 1 |
2 | 5 | 4 | -1 |
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
return -1
dp를 활용한 문제였다.
x
를 y
로 변환하기 위한 최소 연산의 수가 필요하기 때문에 set
을 활용했다.
x
값을 dp에 우선 대입한다.y
가 dp에 있다면, 정답을 리턴i+n
i*2
i*3
3가지 연산 중 y
보다 작거나 같으면 dp_y라는 set에 add한다.