자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[완전탐색][상태 트리] - 알파코드(DFS)

얄루몬 2022. 7. 28. 17:36

문제

주어진 수를 문자로 매칭해서 해당 수를 문자로 바꿔라

문제 풀이

def DFS(L, p):
    global cnt
    if L == n:
        cnt += 1
        for i in range(p):
            print(chr(res[i] +64), end=" ")
        print()
        
    else:
        for i in range(1,27):
            if code[L] == i:
                res[p] = i
                DFS(L+1, p+1)
            elif i>=10 and code[L] == i//10 and code[L+1] == i%10:
                res[p] = i
                DFS(L+2, p+1)
            

         
if __name__ =="__main__":
    code = list(map(int,input()))
    n = len(code)
    code.insert(n,-1)
    res = [0] * (n+3)
    cnt = 0
    DFS(0,0)
    print(cnt)

  • 해당 레벨의 노드에서 찾는 값의 문자열에 매칭되는 수를 res에 넣기 위해서 26번을 돌며 진행하고 이때 for문을 도는 i가 10이 넘어가면 2의 자리수이기 때문에 이를 따로 확인해준다.
  • 2의 자리수를 확인하면 code를 두 개 사용해서 확인하기에 node Level은 +2를 해주어야 한다.