๐น N์ผ๋ก ํํ
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(N, number):
# ์ด์ด ๋ถ์ธ ์ซ์ ์ด๊ธฐํ
dp = [set([int(str(N)*i)]) for i in range(1, 9)]
# N ์ฌ์ฉ ํ์
for cnt in range(8):
for i in range(cnt):
# N์ ์ด ์นด์ดํธ ๊ฐ์ ์ค i๊ฐ
for num1 in dp[i]:
# N์ ์ด ์นด์ดํธ ๊ฐ์ ์ค i๊ฐ๋ฅผ ์ ์ธํ ๋๋จธ์ง
for num2 in dp[cnt-i-1]:
dp[cnt].add(num1 + num2)
dp[cnt].add(num1 - num2)
dp[cnt].add(num1 * num2)
if num2 != 0:
dp[cnt].add(num1 // num2)
# number๊ฐ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ์์ผ๋ฉด ๋ฆฌํด
if number in dp[cnt]:
return cnt + 1
return -1
์ ํ์ฑ
ํ ์คํธ 1 ใ ํต๊ณผ (0.86ms, 10.4MB) ํ ์คํธ 2 ใ ํต๊ณผ (0.03ms, 10.4MB) ํ ์คํธ 3 ใ ํต๊ณผ (0.06ms, 10.1MB) ํ ์คํธ 4 ใ ํต๊ณผ (27.03ms, 11.1MB) ํ ์คํธ 5 ใ ํต๊ณผ (13.39ms, 10.9MB) ํ ์คํธ 6 ใ ํต๊ณผ (0.21ms, 10.3MB) ํ ์คํธ 7 ใ ํต๊ณผ (0.20ms, 10.4MB) ํ ์คํธ 8 ใ ํต๊ณผ (20.73ms, 11.3MB) ํ ์คํธ 9 ใ ํต๊ณผ (0.03ms, 10.2MB)
3. ํด์ค
N์ ์ฌ์ฉํ ์๊ฐ ์ต์๊ฐ ๋๋๋ก ํ์ฌ ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด N์ 1๊ฐ๋ถํฐ 8๊ฐ๊น์ง ์ฐจ๋ก๋๋ก ์ฌ์ฉํด๋ณด๋ฉฐ ๊ทธ ์ค number๊ฐ ์์ ์์ N์ ์ฌ์ฉ ๊ฐ์๋ฅผ ๋ฆฌํดํด์ค๋ค.
N์ 1๊ฐ ์ฌ์ฉํ์ ๋ ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ โ N (ํ ๊ฐ)
N์ 2๊ฐ ์ฌ์ฉํ์ ๋ ๋์ฌ ์ ์๋ ๊ฒฝ์ฐ โ NN, N + N, N - N, N * N, N / N (๋ค์ฏ ๊ฐ)
์ฐจ๋ก๋๋ก ๋์ดํ๋ค๋ณด๋ฉด N์ 8๊ฐ ์ฌ์ฉํ์ ๊ฒฝ์ฐ๋ NNNNNNNN์ ๋์ดํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋
(N์ i๊ฐ ์ฌ์ฉํ์ ๋ ๊ฒฐ๊ณผ ๊ฐ๋ค)๊ณผ (N์ 8-i๊ฐ ์ฌ์ฉํ์ ๋ ๊ฒฐ๊ณผ ๊ฐ๋ค) ์ด ๋ ๊ฐ์ง ์ผ์ด์ค๋ฅผ ์ฐ์ฐํ ๊ฒฝ์ฐ๊ฐ 8๊ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณ์ฐํ ์ผ์ด์ค๋ค์ ๊ฒฐ๊ณผ๊ฐ์ด๋ค.
๋ฐ๋ผ์ dp๋ฅผ N์ ๋์ดํ ๊ฒฝ์ฐ๋ก ์ด๊ธฐํ ํด์ค ํ, 1๋ถํฐ 8๊น์ง ์์๋๋ก ์ฌ์ฉํ์ฌ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฃ์ด์ค๋ค.
์ด๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ๋ค ์ค number๊ฐ ์๋ค๋ฉด(๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌ) ์ฌ์ฉํ N์ ๊ฐ์๋ฅผ ๋ฆฌํดํด์ค๋ค.
๋ง์ฝ 8๋ฒ๊น์ง ๊ณ์ฐ ์ค์์๋ number๊ฐ ๋์ค์ง ์๋๋ค๋ฉด -1์ ๋ฆฌํดํด์ค๋ค.