아래와 같이 5와 사칙연산만으로 12를 표현할 수 있습니다.
12 = 5 + 5 + (5 / 5) + (5 / 5)
12 = 55 / 5 + 5 / 5
12 = (55 + 5) / 5
5를 사용한 횟수는 각각 6,5,4 입니다. 그리고 이중 가장 작은 경우는 4입니다.
이처럼 숫자 N과 number가 주어질 때, N과 사칙연산만 사용해서 표현 할 수 있는 방법 중 N 사용횟수의 최솟값을 return 하도록 solution 함수를 작성하세요.
N | number | return |
---|---|---|
5 | 12 | 4 |
2 | 11 | 3 |
number
가 존재하는 횟수를 찾는다.-1
을 반환한다.number
가 존재하는지 확인-1
반환# 코드
def solution(N, number):
answer = -1
dp = {i : set() for i in range(1, 9)}
if N == number:
answer = 1
return answer
dp[1].add(N)
for i in range(2, 9):
dp[i].add(int(str(N)*i))
for half in range(1, i//2+1):
for x in dp[half]:
for y in dp[i-half]:
add, minus1, minus2, mul = x+y, x-y, y-x, x*y
if 0 < add <= 32000 :
dp[i].add(add)
if 0 < minus1 <= 32000:
dp[i].add(minus1)
if 0 < minus2 <= 32000:
dp[i].add(minus2)
if 0 < mul <= 32000:
dp[i].add(mul)
if y != 0:
quotient, mod = divmod(x, y)
if mod == 0 and 0 < quotient <= 32000:
dp[i].add(quotient)
if x != 0:
quotient, mod = divmod(y, x)
if mod == 0 and 0 < quotient <= 32000:
dp[i].add(quotient)
if number in dp[i]:
answer = i
return answer
return answer