본문 바로가기
백준 알고리즘(BOJ)

백준 알고리즘 1759 (암호 만들기) - python

by Think_why 2019. 10. 16.

[문제] 백준 알고리즘 1759 (암호 만들기)

https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

 

N과 M의 연장선에 있는 문제이다. C와 L로 이름만 바뀌었다.

조건은 최소 1개의 모음과 2개의 자음으로 구성된 암호이고,

사전식으로 가능성 있는 암호를 모두 출력하는 문제이다.

 

1. 먼저 얻은 배열을 sort() 한다. (문자열 순으로도 됨) L자리의 암호 얻기 위해서 DFS를 적용,

    이 때 idx를 i+1을 넘겨주어 사전식으로 가능한 것들만 출력용 배열에 stack 한다.

2. 출력용 배열에서 1개 이상의 모음 / 2개 이상의 자음을 검사하여 print 한다.

 

[Code]

L, C = map(int, input().split())
alpha = list(map(str, input().split()))
out = []
all_out = []
alpha.sort()

def solve(depth, idx, L, C):
    if depth == L:
        all_out.append(''.join(map(str, out)))
        return
    for i in range(idx, C):
        out.append(alpha[i])
        solve(depth+1, i+1, L, C)
        out.pop()

def password(list_check):
    for i in list_check:
        cons = 0
        vow = 0
        for j in i:
            if j in 'aeiou':
                cons += 1
            else:
                vow += 1
        if cons >= 1 and vow >= 2:
            print(i)
    return

solve(0, 0, L, C)
password(all_out)
728x90

댓글