Algorithm Problem/Python
[python] 백준 - 1759. 암호 만들기
deo2kim
2020. 5. 27. 00:06
반응형
문제 해결
1. 암호는 알파벳 순서로 짜야하므로 오름차순 정렬
2. 모음의 포함 유무를 확인하기 위해 aeiou를 생성
3. 자음이 1개이상, 모음이 2개이상일 때 result에 추가
소스 코드
def bt(idx, word):
# 암호의 길이가 L이 됐을 때
if len(word) == L:
vowel_cnt = 0
consonant_cnt = 0
for w in word:
if w in vowel:
vowel_cnt += 1
else:
consonant_cnt += 1
# 자음이 1개 이상, 모음이 2개 이상일 때만 result에 추가해 준다.
if vowel_cnt >= 1 and consonant_cnt >= 2:
result.add(word)
break
return
# 함수에 들어갈 때 이전 선택 다음부터 선택: i+1
for i in range(idx, C):
bt(i+1, word+words[i])
L, C = map(int, input().split())
words = input().split()
# 문제에서 암호는 알파벳이 증가하는 순서 대로 짜야 하므로
words.sort()
# 모음의 포함 유무 확인용
vowel = 'aeiou'
# 중복된 결과 선택을 피하기 위해 set 사용
result = set()
bt(0, '')
# set은 순서가없으므로 list로 바꿔준 후 정렬
result = list(result)
result.sort()
for row in result:
print(row)
출처 : BACKJOON ONLINE JUDGE
문제 : https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
반응형