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

 

반응형