알고리즘 문제 풀기/백준(Baekjoon)

[백준 알고리즘]1759.암호만들기 - 파이썬

hibscus 2021. 3. 25. 23:59

 

 

 

 

 

 

중복되지 않는 조합을 찾는 문제라 재귀를 사용하여 풀었다.

 

자음과 모음의 개수도 암호를 만드는 데 필요한 조건이라 추가적으로 자음과 모음의 개수도 함께 인자로 전달했다!

 

조합이 익숙해지니, 이런 문제는 오히려 고마워졌다..ㅎㅎ

 

 

 

 

 

import sys

# 중복되지 않는 조합, 정렬하기
def make_password(idx, start, vowels, consonants):
    if idx == l:
        if vowels >= 1 and consonants >= 2:
            print("".join(map(str, password)))
        return
    for i in range(start, c):
        password[idx] = chars[i]
        if chars[i] in ['a', 'e', 'i', 'o', 'u']:
            vowels += 1
            make_password(idx+1, i+1, vowels, consonants)
            vowels -= 1
        else:
            consonants += 1
            make_password(idx+1, i+1, vowels, consonants)
            consonants -= 1



l, c = map(int, sys.stdin.readline().split())
chars = list(sys.stdin.readline().split())
chars.sort()
password = [0] * l


make_password(0, 0, 0, 0)

 

 

 

처음에 만족하는 자음과 모음의 개수 조건을 보지 않아서 틀렸는데,

 

제출하기 전에 문제를 다시 한번 읽고, 반례도 대입해본뒤 제출해보자!