[python]伯準/gold/1759:パスワードの作成


質問リンク:https://www.acmicpc.net/problem/1759
バックグラウンドトラッキングの問題ですが、Python itertoolsモジュールの組合せクラスを使うと問題が解決しやすくなります.しかし、背もたれを練習するために、両方の方法で練習した.
でもどう見ても組み合わせで解決したほうがいい時間効率も約2倍に向上した.
コンポジットコード
import sys
from itertools import combinations
L, C = map(int, sys.stdin.readline().split())
alphabet = list(sys.stdin.readline().split())
alphabet.sort()
combis = list(combinations(alphabet, L))
a = ['a', 'e', 'i', 'o' ,'u']   # 모음

for comb in combis:
    jaEum = 0
    moEum = 0
    result = ''
    for c in comb:
        if c in a:
            moEum += 1
        else:
            jaEum += 1
        result += c
    if moEum >= 1 and jaEum >= 2:
        print(result)
トレースバックコード
import sys
sys.setrecursionlimit(10**6)
L, C = map(int, sys.stdin.readline().split())
alphabet = list(sys.stdin.readline().split())
mo = ['a', 'e', 'i', 'o', 'u']  # 모음
alphabet.sort()


def check(word):
    moEum = 0
    jaEum = 0
    for w in word:
        if w in mo:
            moEum += 1
        else:
            jaEum += 1

    return moEum, jaEum


def dfs(idx, word):
    word += alphabet[idx]
    result = check(word)
    if len(word) == L:
        if result[0] >= 1 and result[1] >= 2:
            print(word)
        return

    for i in range(idx+1, C):
        dfs(i, word)


for x in range(C):
    dfs(x, "")