p_비밀코드해독_388352

source school.programmers.co.kr/learn/course...
topics
types 문제풀이
정답여부 성공

백트래킹

문제

5개 정답코드
질문에몇개가 맞는지 나옴
이질문에 해당하는 정답코드를 구하삼요

정답코드 될수잇는거 다구해서 질문에 맞는걸 거르기

  1. 5중 for문
  2. import itertools 이용
    list(itertools.combinations(range(1, n + 1), 5))
  3. 백트래킹,브루드포스 << 나의 코드임

처음에 탈출 조건을잘못둬서에러가났음
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