[백준] 암호만들기

[백준] 암호만들기_1759

[백준] 암호만들기

암호만들기

풀이

전형적인 완전탐색(브루트 포스), dfs이용해서 모두 체크

생각해야할 점.
1) 모음은 적어도 한 개이상, 자음은 2개 이상 -> 자음은 모음을 제외한 모든 수 2) 알파벳은 증가하는 순서로 (오름차순) 3) 정답 알파벳은 총 L 개수
4) C가 더 크기 때문에 모든 알파벳을 다 살펴봐야함! (dfs이용한 백트래킹)

생각할 때 막혔던 점.
크게 없었는데, 출력할 때 값을 잘못 출력해서 틀림으로 나왔다.
주의!

L, C = map(int, input().split())
data = input().split()
M = ['a','e','i','o','u']
result = []

data.sort()

def dfs(idx, ans, num_m):
    global result
    
    if len(ans) == L:
        if num_m >= 1 and (L-num_m) >= 2:
            result.append("".join(ans))
        return

    for i in range(idx, C):
        flag = True
        if data[i] in M:
            flag = False
            num_m += 1
        ans.append(data[i])
        dfs(i+1, ans, num_m)
        ans.remove(data[i])
        if not flag:
            num_m -= 1

ans = []
dfs(0, ans, 0)

for res in result:
    print(res)