p_비밀코드해독_388352
| source | school.programmers.co.kr/learn/course... |
| topics | |
| types | 문제풀이 |
| 정답여부 | 성공 |
백트래킹
문제
5개 정답코드
질문에몇개가 맞는지 나옴
이질문에 해당하는 정답코드를 구하삼요
답
정답코드 될수잇는거 다구해서 질문에 맞는걸 거르기
- 5중 for문
- import itertools 이용
list(itertools.combinations(range(1, n + 1), 5)) - 백트래킹,브루드포스 << 나의 코드임
처음에 탈출 조건을잘못둬서에러가났음
depth >= n or cnt == 5 이렇게 하면 오류가남
왜냐면 check는질문지에 맞는지를 체크하는거지5개인지체크하는게아님
result=0으로두고 계속 더하면됨요
def solution(n, q, ans):
arr = [0]*n
answer = brute(arr,0,0,n,q,ans)
return answer
def brute(arr,depth,cnt,n,q,ans):
result = 0
if cnt > 5:
return 0
if cnt == 5:
if check(arr,q,ans): # + check
# print("suc",arr)
return 1
# print("fail",arr)
return 0
if depth >= n:
return 0
for i in range(depth,n):
arr[i] = 1 # 방문처리
result += brute(arr,i+1,cnt+1,n,q,ans)
# print(result,i,cnt)
arr[i] = 0
return result
def check(arr,q,ans):
for i in range(len(q)):
cnt = 0
for j in range(5):
if arr[q[i][j]-1] == 1:
cnt +=1
if ans[i] != cnt:
return False
return True