ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 완전탐색_모음사전
    Algorithm/programers 2022. 10. 27. 14:47

    생각보다 시간이 많이 걸렸던 문제,, 

     

    접근 방법

    완전탐색을 사용해야 한다. 문제의 예시에서 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. 의 순서로 탐색이 진행되기 때문에 재귀의 방식을 활용해야 함을 알 수 있다.

     

    def solution(word):
        global answer
        global cnt
        moeum = ['A', 'E', 'I', 'O', 'U']
        dfs('',moeum,word)
        return answer
    
    answer = 0
    cnt = 0 
    flag = False
    
    def dfs(k,moeum,word):
        global answer
        global cnt
        global flag
        print(k)
        
        # 정답여부 변수
        if flag:
            return
        
        # 정답과 같으면 return
        if k == word:
            print(cnt)
            answer = cnt
            flag = True
            return True
        
        # 길이가 모음사전의 길이와 같아지면 return
        if len(k) == 5:
            return
        
        temp = k
        # 재귀
        for n in moeum:
            temp += n
            cnt+=1
            dfs(temp,moeum,word)
            temp = temp[:-1]

    flag 변수 적용
    flag 변수 적용 안함

     

    처음 flag 변수를 적용하지 않았을 때도 정답은 나온다. 하지만 log를 출력했을 때, 정답을 찾았음에도 모든 변수를 탐색하고 종료되는 것을 알 수 있다. 개선을 하고자 flag 변수를 두어 재귀 호출 중 정답을 발견하면 flag 변수를 True 값으로 만들어 이후 탐색에서는 dfs 호출 후 바로 return 만 되도록 구현하였다. 사실 이 방식도 정답을 찾은 후 바로 모든 재귀가 종료되지는 않지만, 정답을 찾기 위해 호출한 재귀의 횟수만큼만 추가 시행이 된 후 프로그램이 종료되었다.

    'Algorithm > programers' 카테고리의 다른 글

    안전지대  (0) 2024.08.18
    해쉬_전화번호 목록  (0) 2022.10.26
    해쉬_완주하지 못한 선수  (0) 2022.10.26
    [Lv.1] 성격 유형 검사하기  (1) 2022.09.24
    [Lv.1] 나머지가 1이 되는 수 찾기  (0) 2022.09.22
Designed by Tistory.