[νλ‘κ·Έλλ¨Έμ€ / Python] NμΌλ‘ νν
λ¬Έμ λ§ν¬: programmers.co.kr/learn/courses/30/lessons/42895
μ½λ©ν μ€νΈ μ°μ΅ - NμΌλ‘ νν
programmers.co.kr
λ¬Έμ μ€λͺ
μ²μμ numberμ λν dp ν μ΄λΈμ μμ±ν΄μ λ¬Έμ λ₯Ό νλ €νλλ°, κ·Έκ² μλλΌ Nμ μ¬μ© νμμ λν dp ν μ΄λΈμ μ΄μ©ν΄ λ¬Έμ λ₯Ό ν΄κ²°ν΄μΌ νλ€. λ¬Έμ μμ μ΅μκ°μ΄ 8λ³΄λ€ ν΄ κ²½μ° -1μ λ°ννλ€κ³ λμμμΌλ―λ‘ Nμ 8λ² μ¬μ©νλ κ²½μ°κΉμ§λ§ κ³μ°νλ©΄ λλ€.
Nμ iλ² μ¬μ©νλ κ²½μ° λ§λ€ μ μλ μ:
- NNN...N (Nμ΄ iλ² λ°λ³΅λλ κ²½μ°)
- (Nμ 1λ² μ¬μ©ν μ) μ¬μΉμ°μ° (Nμ i - 1λ² μ¬μ©ν μ)
- (Nμ 2λ² μ¬μ©ν μ) μ¬μΉμ°μ° (Nμ i - 2λ² μ¬μ©ν μ)
...
- (Nμ i - 1λ² μ¬μ©ν μ) μ¬μΉμ°μ° (Nμ 1λ² μ¬μ©ν μ)
μ΄μ²λΌ Nμ 1λ² μ¬μ©νλ κ²λΆν° 8λ² μ¬μ©νλ κ²½μ°κΉμ§λ₯Ό κ° μ§ν©μ λ£κ³ , λ§μ½ numberκ° ν΄λΉ μ§ν©μ μμλΌλ©΄ iλ₯Ό λ°ννλ©΄ λλ€.
μμ€μ½λ
from collections import defaultdict
def solution(N, number):
# dp[i]: Nμ iλ² μ¬μ©ν΄μ λ§λ€ μ μλ μλ€μ μ§ν©
dp = defaultdict(set)
for i in range(1, 9):
dp[i].add(int(str(N) * i)) # NNN...N
for j in range(1, i):
for n1 in dp[j]:
for n2 in dp[i - j]:
dp[i].add(n1 + n2)
dp[i].add(n1 - n2)
dp[i].add(n1 * n2)
if n2 != 0: dp[i].add(n1 // n2) # 0μΌλ‘ λλ μ μμ
if number in dp[i]: return i # Nμ iλ² μ¬μ©ν΄μ numberλ₯Ό λ§λ€ μ μμ
return -1 # μ΅μκ°μ΄ 8λ²λ³΄λ€ ν΄ κ²½μ°