[BOJ] #1759 - 암호 만들기
2021. 6. 29. 13:58ㆍProblem Solving/Online Judge
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
** 문제 유형
- 백트래킹
** 풀이
- C개의 문자들이 주어졌을 때, 가능한 L 길이의 암호를 모두 찾아야 함
- 따라서 C개의 문자들 중에서 L개를 선택하는 모든 조합을 고려
- 파이썬의 조합(combinations) 라이브러리를 사용하면 간단히 해결 가능
- 혹은 DFS를 이용하여 조합 함수 구현 가능
from itertools import combinations as comb
l, c = map(int, input().split())
array = list(input().split())
# 가능한 암호를 사전식으로 출력해야 하므로 정렬 수행
array.sort()
vowels = ['a', 'e', 'i', 'o', 'u']
# 길이가 l인 모든 암호 조합 확인
for pwd in list(map(''.join, comb(array, l))):
cnt = 0
# 모음의 개수 세기
for i in pwd:
if i in vowels:
cnt += 1
# 최소 한 개의 모음과 최소 2개의 자음이 있는 경우 출력
if cnt >= 1 and cnt <= l - 2:
print(pwd)
'Problem Solving > Online Judge' 카테고리의 다른 글
[프로그래머스] 주식가격 (0) | 2024.08.15 |
---|---|
[프로그래머스] 실패율 (0) | 2024.08.09 |
[BOJ] #1987 - 알파벳 (0) | 2021.06.29 |
[BOJ] #9663 - N-Queen (0) | 2021.06.29 |
[BOJ] #1092 - 배 (0) | 2021.06.25 |