๐ ๋ฌธ์
https://programmers.co.kr/learn/courses/30/lessons/42895
๋ฌธ์ ์ค๋ช
์๋์ ๊ฐ์ด 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์ 1 ์ด์ 9 ์ดํ์ ๋๋ค.
- number๋ 1 ์ด์ 32,000 ์ดํ์ ๋๋ค.
- ์์์๋ ๊ดํธ์ ์ฌ์น์ฐ์ฐ๋ง ๊ฐ๋ฅํ๋ฉฐ ๋๋๊ธฐ ์ฐ์ฐ์์ ๋๋จธ์ง๋ ๋ฌด์ํฉ๋๋ค.
- ์ต์๊ฐ์ด 8๋ณด๋ค ํฌ๋ฉด -1์ return ํฉ๋๋ค.
โ๏ธ ํ์ด
DP ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ฌ์ฉํ๋ ๋ฌธ์ ์ด๋ค.
number๋ฅผ ๋ง๋ค๊ธฐ ์ํด N์ ์ต์๋ก ์ฌ์ฉํด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ค๋ฉด, N์ 1๋ฒ ์ผ์ ๋๋ถํฐ 2๋ฒ, 3๋ฒ...๋๋ ค๊ฐ๋ฉฐ ๋ชจ๋ ์ฐ์ฐ์ ์ฒ๋ฆฌํ์ ๋ number๊ฐ ๋์ค๋์ง๋ฅผ ์ฒดํฌํ๊ณ ๋ฉ์ถฐ์ผ ํ๋ค.
โ๏ธ dp[ i ] : N์ i๋ฒ ์ผ์ ๋ ๋ง๋ค์ด์ง๋ ์ซ์ ์กฐํฉ
โป๏ธ N์ 1๋ฒ~9๋ฒ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐ์ ธ๋ณธ๋ค.
โป๏ธ K๋ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋, 1~(K-1)๋ฒ ์ผ์ ๋ ๋์ค๋ ์ซ์์ (K-1)~1๋ฒ ์ผ์ ๋ ๋์ค๋ ์ซ์๋ฅผ ์ด์ด๋ถ์ด๋ ๊ฒ์ด๋ค.
ex) N์ 4๋ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. dp[1]๐dp[3] / dp[2]๐dp[2]/ dp[3]๐dp[1]
โป๏ธ ๋ฐ๋ผ์ K๋ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ์ํด dp[1]๐dp[K-1], dp[2]๐dp[K-2] ...๋ฅผ ํ๋ํ๋ ์ฐ์ฐํ ํ ์ค๋ณต๋ฐฉ์ง๋ฅผ ์ํ ์งํฉ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๊ฐํ๋ค.
โป๏ธ ๋ชจ๋ ์กฐํฉ์ ๋ค ๋ง์น ํ number๊ฐ ๊ฒฐ๊ณผ์งํฉ ์์ ๋ค์ด์๋ค๋ฉด, ๋ฐ๋ก K๋ฅผ ๋ฆฌํดํ๊ณ ์ฐ์ฐ์ ์ข ๋ฃํ๋ค.
๐โ๏ธ ์๊ฒฌ
DP๋ ํด๋ํด๋ ๋ชจ๋ฅด๊ฒ ๋ค....๊ทธ๋๋ ์ด ๋ฌธ์ ๊ฐ ๊ฐ์ ์ก๋๋ฐ ๋์์ด ํฌ๊ฒ ๋๋ ๊ฒ ๊ฐ๋ค.
๐ป ์์ค์ฝ๋: ํ์ด์ฌ(Python)
def solution(N, number):
answer = -1
dp = [0]
# N์ 1๋ฒ ์ฌ์ฉ-> N
# N์ 2๋ฒ ์ฌ์ฉ-> NN, N-N, N+N, N*N, N/N
for i in range(1, 9): #N์ i๋ฒ ์ฌ์ฉํด์ ๋ง๋๋ ์ซ์์กฐํฉ ์ฐพ๊ธฐ
num_set = set()
num_set.add(int(str(N)*i))
for j in range(1, i): #์๋ฅผ ๋ค์ด i๊ฐ 6์ด๊ณ j๊ฐ 2๋ผ ํ ๋
for x in dp[j]: # dp[2]
for y in dp[-j]: # dp[-2] = dp[4]
num_set.add(x + y)
num_set.add(x - y)
num_set.add(x * y)
if y != 0:
num_set.add(x // y)
if number in num_set:
return i
dp.append(num_set)
return answer
#์์ ์ถ๋ ฅ
#print(solution(5, 12))
#print(solution(2, 11))
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ