문제
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
두 정수 L, C가 주어진다. 문자의 종류는 C가지가 있고, 서로 다른 L개의 알파벳 소문자들로 구성되며 최소 한 개의 모음과 최소 두 개의 자음으로 구성되어 있는 암호를 추측하는 문제다.
예시
Example 1:
Input: 4 6
a t c i s w
Output: acis
acit
aciw
acst
acsw
actw
aist
aisw
aitw
astw
cist
cisw
citw
istw
풀이
l, c = map(int, input().split())
alpha = list(input().split())
alpha.sort()
# 모음 자음 개수 확인
def is_ok(password):
vowels = set('aeiou')
vowel_count = 0
for p in password:
if p in vowels:
vowel_count += 1
return vowel_count >= 1 and l - vowel_count >= 2
# 깊이 우선 탐색
def dfs(level, start, path):
if level == l:
if is_ok(path):
print(path)
return
for i in range(start, c):
dfs(level + 1, i + 1, path + alpha[i])
dfs(0, 0, '')
- 특정 조건(최소 두 개의 자음, 한 개의 모음)을 만족하는지 확인하는 함수를 사용한다.
- 깊이 우선 탐색을 통해 레벨이 주어진 비밀번호의 길이와 같아지면 조건을 만족하는지 확인하고, 조건을 만족하면 해당 비밀번호를 출력한다.
'알고리즘' 카테고리의 다른 글
[리트코드(LeetCode)] 207번 Course Schedule (0) | 2024.01.11 |
---|---|
[리트코드(LeetCode)] 78번 Subsets (0) | 2024.01.11 |
[백준(BOJ)] 2606번 바이러스 (1) | 2024.01.10 |
[백준(BOJ)] 2667번 단지번호붙이기 (1) | 2024.01.10 |
[리트코드(LeetCode)] 77번 Combinations (1) | 2024.01.10 |