https://www.acmicpc.net/problem/1759
이 문제의 조건은 다음과 같다.
- 암호의 길이는 L이다.
- 암호는 C 개의 알파벳으로만 이루어진다.
- 최소 한 개의 모음과 최소 두 개의 자음이 포함되어 있어야한다.
3번의 조건을 맞추기 위해 check를 만들었다.
check 함수는 자음과 모음 갯수를 세서 3번 조건에 맞는지 확인하는 함수이다.
import sys
input = sys.stdin.readline
def check(password):
ja = 0 # 자음 갯수
mo = 0 # 모음 갯수
for x in password:
if x in 'aeiou':
# 해당 password에 모음 갯수 세기
mo += 1
else:
# 해당 password에 자음 갯수 세기
ja += 1
# 최소 한 개의 모음과 최소 두개의 자음이 포함 되어 있다면 True
return ja >= 2 and mo >= 1
def go(n, alpha, password, i):
if len(password) == n:
if check(password):
print(password)
return
if i == len(alpha):
return
# i 번째 알파벳을 사용하는 경우
go(n, alpha, password+alpha[i], i+1)
# i 번째 알파벳을 사용하지 않는 경우
go(n, alpha, password, i+1)
# L: 암호의 길이 C: 주어지는 알파벳 수
L, C = map(int, input().split())
c_arr = input().split()
# 정렬
c_arr.sort()
go(L, c_arr, "", 0)
'알고리즘 > 브루트포스' 카테고리의 다른 글
[백준/브루트포스] 9095 1, 2, 3 더하기(Python, 파이썬) (0) | 2021.05.19 |
---|---|
[백준/브루트포스] 18290 NM과 K (1) (Python, 파이썬) (0) | 2021.05.17 |
[백준/브루트포스] 15656 N과 M (8) (Python, 파이썬) (0) | 2021.05.15 |
[백준/브루트포스] 15656 N과 M (7) (Python, 파이썬) (0) | 2021.05.15 |
[백준/브루트포스] 15655 N과 M (6) (Python, 파이썬) (0) | 2021.05.15 |