공부 기록장

[백준 - Python] 1759. 암호 만들기 (완전 탐색) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 1759. 암호 만들기 (완전 탐색)

빛나무 2024. 2. 2. 11:07

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

 

1759번: 암호 만들기

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

www.acmicpc.net

 

코드

from itertools import combinations

l, c = map(int, input().split())
ch = list(map(str, input().split()))
ch.sort()  # 조합 사용 전에 정렬

per = list(combinations(ch, l))
for p in per:  # p는 가능한 한 가지 조합 경우
    cnt = 0
    cnt2 = 0
    for ele in p:
        if ele == 'a' or ele == 'e' or ele == 'i' or ele == 'o' or ele == 'u':
            cnt += 1
        if ele != 'a' and ele != 'e' and ele != 'i' and ele != 'o' and ele != 'u':
            cnt2 += 1

    if cnt > 0 and cnt2 > 1:
        for ele in p:
            print(ele, end='')
        print()

 

C개의 문자 중 L개의 문자를 선택해서 가능한 암호를 만든 후에

최소 한 개의 모음과 최소 두 개의 자음 조건을 만족하는 경우에만 출력을 하도록 하였다.

 

사전식으로 정렬된 암호여야 하는데 조합을 사용해 경우를 구할 것이기 때문에

입력을 받아서 가능한 조합 경우의 수를 구하기 전에

C개의 문자를 정렬부터 해주었다.