728x90
# Baekjoon 1759번: 암호 만들기
import sys
input = sys.stdin.readline
L, C = map(int, input().split())
code = input().split()
code.sort()
def DFS(cstr, m):
global L
if m == C:
if len(cstr) == L:
count = 0
flag = False
for char in cstr:
if char in 'aeiou':
flag = True
else:
count += 1
if flag == True and 1 < count:
print(cstr)
return
DFS(cstr + code[m], m+1)
DFS(cstr, m+1)
DFS("", 0)
이번 문제는 백트래킹 문제이다. 문제에서 요구한 조건은 최소 한 개의 모음과 두 개 이상의 자음을 만족하는 L개의 알파벳 문자를 정렬하여 출력하는 것이다.
모든 경우의 수를 파악하기 위해 DFS 함수를 활용한다. DFS 함수 내부에서 C개의 알파벳을 모두 탐색한 경우(m == C)와 L개의 문자를 구성한 경우(len(cstr) == L)를 만족한 후 자음과 모음이 문제에서 요구한대로 구성되어 있는지 확인하는 과정을 거친다. 이를 만족하는 경우에는 join 함수를 통해 배열을 str로 변환하여 출력하도록 한다.
728x90
'BaekJoon' 카테고리의 다른 글
[Baekjoon/Python] 10026번: 적록색약(BFS) (0) | 2024.10.23 |
---|---|
[Baekjoon/Python] 16928번: 뱀과 사다리 게임(BFS) (2) | 2024.10.18 |
[Baekjoon/Python] 15686번: 치킨 배달(BackTracking) (2) | 2024.10.11 |
[Baekjoon/Python] 14940번: 쉬운 최단거리(BFS) (0) | 2024.10.06 |
[Baekjoon/Python] 11724번: 연결 요소의 개수(BFS) (0) | 2024.10.05 |