[백준] 암호만들기
[백준] 암호만들기_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)