ํ์ด
์คํจํ๋ค. ๋ญ๊ฐ ๊ฐ์ ์ค๋๋ฐ ๊ธฐ์กด์ dp์ฒ๋ผ ํ๋ ค๊ณ ํ๋ ๋ฌธ์ ๊ฐ ์์กํ๋ ๊ธฐ๋ถ. ์ผ๋จ ์ ๊ทผ ๋ฐฉ๋ฒ์ ๋ง์ผ๋, ์์ ์ฒ๋ผ ๋์ดํ๋ฉด์ ๊ท์น์ ์ฐพ๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ฆฌ๊ณ dp์ ํต์ฌ์ ๊ธฐ์กด์ ์ฐ์ฐ์ด ๋์ค์ ์ฐ์ฐ์ ํ ๋ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ธ๋ฐ, ์ฌ๊ธฐ์ 1+1+1๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๊ฐ 1+2์์ ์ฒ๋ฆฌ๋๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค.
Code
def solution(N, number):
# ์ฌ์ฉํ N์ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค ์ ์๋ ์๋ฅผ ๋ฃ์ด๋
# ์ผ๋จ ์ฌ์ฉํ ์ ์๋ N์ ๊ฐ์๋ 8์ดํ๊ธฐ ๋๋ฌธ์ 8๊ฐ์ ๊ณต๊ฐ์ด ์๊ธธ ์์
# dp[i] = i๋ฒ N์ ์ฌ์ฉํ์ฌ ๋ง๋ค ์ ์๋ ์
dp = [ set([int(str(N)*x)]) if x != 0 else 0 for x in range(9)]
for i in range(2, 9):
for j in range(1, i): # j, i-j
for a in dp[j]:
for b in dp[i-j]:
dp[i].add(a+b)
if a-b >= 0:
dp[i].add(a-b)
else:
dp[i].add(b-a)
dp[i].add(a*b)
if b != 0 and a%b == 0:
dp[i].add(int(a/b))
if a != 0 and b%a == 0:
dp[i].add(int(b/a))
answer = -1
for i in range(1, len(dp)):
if number in dp[i]:
answer = i
break
return answer