https://www.acmicpc.net/problem/22251
n, k, p, x = map(int, input().split())
# ์๋ฆฟ์ ๋ง์ถฐ์ฃผ๊ธฐ
if len(str(x)) < k:
cx = '0' * (k-len(str(x))) + str(x)
else:
cx = str(x)
num = ['1111110', '0110000', '1101101', '1111001', '0110011', '1011011',
'1011111', '1110000', '1111111', '1111011']
arr = []
for i in range(10):
arr.append([])
for j in range(10):
if i == j:
arr[i].append(0)
else:
d = 0
for h in range(7):
if num[i][h] != num[j][h]:
d += 1
arr[i].append(d)
def dfs(dep, cnt, cx): # ๊น์ด, ๋จ์ ๋ฐ์ ๊ฐ๋ฅ ํ์, ํ์ฌ ๋ฌธ์์ด
if dep >= len(cx):
if int(cx) == x: # ํ์ฌ ์ธต์์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ผ๋ฉด ์๋จ
return 0
elif 1 <= int(cx) <= n: # ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ
return 1
else: # ๊ทธ์ธ ๊ฒฝ์ฐ๋ ๋ถ๊ฐ๋ฅ
return 0
rst, cur = 0, int(cx[dep]) # ์ ๋ต, ํ์ฌ ๋ฐ๊ฟ์ค ์ซ์
for i in range(10):
if cur != i and (arr[cur][i] <= cnt): # ๋จ์ ๋ฐ์ ๊ฐ๋ฅ ํ์๋ณด๋ค ํ์ํ ๋ฐ์ ํ์๊ฐ ์์์ผ ๋ฐ๊ฟ ์ ์์
dx = cx[:dep] + str(i) + cx[dep+1:]
rst += dfs(dep+1, cnt-arr[cur][i], dx)
elif cur == i:
rst += dfs(dep+1, cnt, cx)
return rst
print(dfs(0, p, cx))
ํฐ์ด๊ฐ ๊ณจ5์ธ๋ฐ ์ด๋ป๊ฒ ํ์ด์ผํ ์ง ๊ฐ์ด ์์์ ์ด์ง ์ถฉ๊ฒฉ๋จน์๐ข
์ฐพ์๋ณด๋ ํ์ด์ฌ ํ์ด๋ ๋์ค์ง๋ ์์์ ๋ค๋ฅธ๋ถ๋ค C++ ํ์ด ๋ณด๊ณ ํ์๋ค
๋นํธ๋ง์คํน+DFS ๋ฌธ์ ์๋ค
โ
์ฝ๋ ์๋ถ๋ถ๋ถํฐ ์์๋๋ก ์ค๋ช ํ๋ฉด
โ
โ
โ
โ
์๊ณ ๋ณด๋ฉด ๋ณ๋ก ์ด๋ ต์ง ์์ ๋ฌธ์ ์ธ๋ฐ
๋ง์ฝ ์ค์ ์ฝํ
์์ ์ด๋ ๊ฒ ๋์์ ๋ ํ ์ ์์์ง๋ ๊ธ์์๐