본문 바로가기

BOJ 알고리즘 (패캠)/탐욕, 백트래킹

1759번: 암호만들기 (백트래킹)

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

# 암호만들기 
# https://www.acmicpc.net/problem/1759 (백트래킹)


import re


def recursive(chars, res, a="", idx=0):
    if len(a) == L:
        co = re.sub("[aeiou]", "", a)  # 자음
        vo = re.sub("[^aeiou]", "", a)  # 모음
        if len(co) >= 2 and len(vo) >= 1:
            res.append(a[:])
        return

    for i in range(idx, C):
        ch = chars[i]
        if ch not in a:  # 가지치기 (이미 선택된 문자 제외)
            a += ch
            recursive(chars, res, a, i + 1)
            a = a[:-1]


L, C = map(int, input().split())
chars = input().split()
chars.sort()

res = []
recursive(chars, res)
[print(x) for x in res]

'BOJ 알고리즘 (패캠) > 탐욕, 백트래킹' 카테고리의 다른 글

1987번: 알파벳 (백트래킹)  (0) 2020.12.02
9663번: N-Queen (백트래킹)  (0) 2020.10.25
1781번: 컵라면 (탐욕)  (0) 2020.10.24
1461번: 도서관 (탐욕)  (0) 2020.10.23
2212번: 센서 (탐욕)  (0) 2020.10.23