문제 : https://www.acmicpc.net/problem/19949
초기 구상과정
처음 생각했던 과정은 이렇다.
초기코드
def dfs(list, step, final, point, base):
global cnt
if s == n:
if point >= 5:
cnt += 1
return
elif point == 5:
cnt += 5 ** (10 - s)
return
elif point + (final - step) < 5:
return
else:
for i in range(1, 6):
base[s] = i
if s > 1 and base[s -2] == base[s - 1] == i:
continue
if list[s] == base[s]:
point += 1
dfs(list, step + 1, final, point, base)
최종 제출
def dfs(s):
global cnt
if s == 10:
point = 0
for j in range(10):
if ans[j] == base[j]:
point += 1
if point >= 5:
cnt += 1
return
for i in range(1, 6):
if s > 1 and base[s - 2] == base[s - 1] == i:
continue
base.append(i)
dfs(s + 1)
base.pop()
ans = list(map(int, input().split()))
cnt = 0
base = []
dfs(0)
print(cnt)
개선점