Algorithm/Python

[백준 1759] 암호만들기

🥭맹2 2021. 5. 27. 16:39

1. 문제

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

2. 접근 방법

주어진 C개의 문자 중 L개의 문자를 골랐을 때,

확인해야할 것은

 

1. 최소 한 개의 모음을 가지고 있는가

2. 최소 두 개의 자음을 가지고 있는가

3. 증가하는 순서인가

 

이다.

 

일단 3을 만족시키기 위해,

input받은 문자들을 정렬시켰다.

 

정렬 시킨 후 L개의 문자를 고르도록 한다.

(이렇게 되면 사전 순서가 지켜지니까)

 

그리고 나서 C개의 문자를 골랐다면 1, 2번을 만족하는지 확인한다.

3. 코드

python

def isPassword(word):
    vowels = ['a', 'e', 'i', 'o', 'u']
    v_cnt = 0
    for i in word:
        if i in vowels:
            v_cnt += 1
    c_cnt = len(word)-v_cnt
    if v_cnt < 1 or c_cnt < 2:
        return False
    return True

def func(s, cnt):
    global L, C, word, answer
    if cnt == L:
        if isPassword(word):
            answer.append(word)
        return
    
    for i in range(s, C):
        word += inputs[i]
        func(i+1, cnt+1)
        word = word[:-1]

L, C = map(int, input().split())
inputs = list(input().split())
inputs.sort()
vowels = ['a', 'e', 'i', 'o', 'u']
consonant = []
word = ''
answer = []
func(0, 0)
print(*answer, sep="\n")

4. 마치며

마치며~!

'Algorithm > Python' 카테고리의 다른 글

[LeetCode] 344. Reverse String  (0) 2021.06.01
[LeetCode] 125. Valid Palindrome  (0) 2021.06.01
[백준 11723] 집합  (1) 2021.05.26
[백준 10819] 차이를 최대로  (0) 2021.05.25
[프로그래머스] 주식가격  (0) 2021.05.20