백준#: 문제유형 / 난이도

문제 링크 : https://www.acmicpc.net/problem/1759

🔍 Inspection

문제 접근(문제 분석 → 풀이 아이디어)

🚩 FLOW

코드를 풀이할 때 적었던 플로우가 있나요?

  1. 문자 오름 차순 정렬
  2. 중복 x 인 일반 조합 → backtracking으로 구하기
  3. 최소 모음 1개 이상 &자음 2개 이상 조건 충족할 경우 출력

🚩제출한 코드

"""
<https://www.acmicpc.net/problem/1759>

4 6
a t c i s w
['a', 'c', 'i', 's', 't', 'w']
- 문자 C 가지로 서로 다른 L개의 문자로 이뤄진 비번
- 비번은 최소 1개의 모음 , 최소 2개의 자음
- 정렬된 문자열 
- goal) 모든 경우의 수 

# 1. 문자 정렬 + 모음 . 자음 나눠두기 
# 2. 중복 x 일반 조합 ? (Backtraking)
# 중복x , 순서 x , (조합)

"""
L , C  = map(int,input().split())
arr = sorted(list(input().split())) #  전체 정렬

# print(f"1 -{arr}")
result = [""] * L 
# print(arr)
# 전체 l 경우에서 c 개 조합
def backtracking(c , l , level , idx) :
    if level == l :
        a = 0 ; b = 0  
        # print(f"result {result}")
        for k in range(l) :
            if result[k] in [ "a" , "e" , "i" ,"o" ,"u"]:
                a +=1
            else :
                b += 1
        if a >= 1 and b >= 2 : 
            print("".join(result))

        return
    for s in range(idx , c) :
        result[level] = arr[s]
        backtracking(c,l,level+1, s+1)
        
backtracking(C , L , 0,0)