[백준/파이썬] 1759번 암호 만들기 풀이

업데이트:



문제 정보


풀이

문제

주어진 문자들로 길이 L의 암호를 만들 때, 오름차순 정렬이고 모음 1개 이상/자음 2개 이상 조건을 만족하는 모든 암호를 출력하는 문제입니다.

코드

l, c = map(int, input().split())
string = input().split()
string.sort()

mo = ('a', 'e', 'i', 'o', 'u')
answers = set()

def create(i, m_cnt, z_cnt, created):
    if m_cnt+z_cnt >= l:
        if m_cnt >= 1 and z_cnt >= 2:
            answers.add(created)
        return
    if i >= c:
        return
    if string[i] in mo:
        create(i+1, m_cnt+1, z_cnt, created+string[i])
    else:
        create(i+1, m_cnt, z_cnt+1, created+string[i])
    create(i+1, m_cnt, z_cnt, created)

create(0, 0, 0, "")

print('\n'.join(map(str, sorted(list(answers)))))

설명

문자를 정렬한 뒤 재귀적으로 선택/비선택 분기를 타며 길이 L 조합을 생성합니다.

완성된 문자열에서 모음/자음 조건을 검사해 저장하고, 마지막에 정렬해 출력합니다.



댓글남기기