|
์ฝ๋ ์์ฑํ๊ธฐ
from collections import deque
def solution(N, number):
DP = [set() for _ in range(9)]
pre = [N, N*11, N*111, N*1111, N*11111, N*111111, N*1111111]
for i in range(len(pre)):
if pre[i] == number:
return i+1
DP[i+1].add(pre[i])
for i in range(2, 9):
for j in range(1, i):
for k in DP[i-j]:
for h in DP[j]:
DP[i].add(k+h)
DP[i].add(k-h)
DP[i].add(k*h)
if h != 0:
DP[i].add(k//h)
if number in DP[i]:
return i
return -1
Java
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
์ฒ์์ ์ซ์๋ก DP๋ฅผ ๋ง๋ค์๋๋ฐ ์ซ์๊ฐ ๋๋ฌด ์ปค์ ธ์ ์คํจํ์๋ค.
๋๋ฒ์งธ๋ก N์ด ๋ค์ด๊ฐ๋ ๊ฐฏ์๋ก DP๋ฅผ ์์ฑํ๋๋ฐ ๊ดํธ๋ฅผ ์ ๊ฒฝ์ฐ์ง ๋ชปํด์ ํค๋งค๊ฒ๋์๋ค.
DP์๋ N 1๊ฐ๋ก ํํํ ์ ์์ผ๋ฉด DP[1]์ ๋ค์ด๊ฐ๊ณ , 2๊ฐ๋ก ํํํ ์ ์์ผ๋ฉด DP[2]์ ๋ค์ด๊ฐ๊ฒ ํ ๊ฒ์ด๋ค.
์ค๋ณต๋ ์ ์์ผ๋ฏ๋ก set()์ผ๋ก ์ด๊ธฐํํ๋ค.
์ฒ์์ N = 5 ๋ผ๊ณ ํ๋ฉด [5, 55, 555, 5555 ,.. 555555]๋ฅผ ๋ฃ์ด์ฃผ๊ณ number์ ์ผ์นํ๋ ๊ฒ์ด ์์ผ๋ฉด ๋ฐ๋ก ๋ฐํํ์๋ค.
for DP์ ๊ธธ์ด๋งํผ i๋ 2์์ 8๊น์ง ๋ ๊ฒ์ด๋ค.:
for j๋ 1๋ถํฐ i-1๋ก ์ด๋ ๊ดํธ๋ฅผ ๋๋๋ ๊ธฐ์ค์ด ๋๋ค:
(j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์) + (i-j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์)
(j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์) - (i-j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์)
(j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์) * (i-j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์)
(j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์) // (i-j๊ฐ์ N์ผ๋ก ๋ง๋ค ์ ์๋ ์) โ 0์ด ์๋ ๋๋ง
๋ง๋ค์ด์ง ์ ์ค์ number๊ฐ ์์ผ๋ฉด i๋ฅผ ๋ฐํ
8๊น์ง ๋์๋๋ฐ ์์ผ๋ฉด -1 ๋ฐํ