본문 바로가기

algorithm/백준알고리즘

[백준알고리즘] 1759번: 암호 만들기 -Python

728x90

[백준알고리즘] 1759번: 암호 만들기 -Python

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

 

1759번: 암호 만들기

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

www.acmicpc.net

itertools 모듈combinations 메서드를 사용해서 쉽게 주어진 알파벳의 조합 쌍을 만들 수 있었다.

combinations를 사용하지 않는 경우 조합을 만들기 위해서는 DFS방식처럼 하나씩 조합의 길이만큼 원소를 추가해 나가면 된다.

 

combinations에 넣기 전에 정렬해줌으로써 정렬된 조합의 결과들은 모두 각각 정렬된 상태로 받을 수 있었다.

 

이 상태에서 set()을 이용해 주어진 조합에서 모음을 제외한 알파벳의 개수를 얻도록 difference()를 사용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
from itertools import combinations
 
l, c = map(int, sys.stdin.readline().split())
alpha = sorted(list(sys.stdin.readline().split()))
VOWELS = set('aeiou'# 모음
 
cm = list(combinations(alpha, l))
cm.sort()
for c in cm:
    diff = set(c).difference(VOWELS)
    if 1 < len(diff) < l:
        print(''.join(c))
        continue

 

잘못된 점이나 부족한 점 지적해주시면 감사하겠습니다

728x90