중복되지 않는 조합을 찾는 문제라 재귀를 사용하여 풀었다.
자음과 모음의 개수도 암호를 만드는 데 필요한 조건이라 추가적으로 자음과 모음의 개수도 함께 인자로 전달했다!
조합이 익숙해지니, 이런 문제는 오히려 고마워졌다..ㅎㅎ
import sys
# 중복되지 않는 조합, 정렬하기
def make_password(idx, start, vowels, consonants):
if idx == l:
if vowels >= 1 and consonants >= 2:
print("".join(map(str, password)))
return
for i in range(start, c):
password[idx] = chars[i]
if chars[i] in ['a', 'e', 'i', 'o', 'u']:
vowels += 1
make_password(idx+1, i+1, vowels, consonants)
vowels -= 1
else:
consonants += 1
make_password(idx+1, i+1, vowels, consonants)
consonants -= 1
l, c = map(int, sys.stdin.readline().split())
chars = list(sys.stdin.readline().split())
chars.sort()
password = [0] * l
make_password(0, 0, 0, 0)
처음에 만족하는 자음과 모음의 개수 조건을 보지 않아서 틀렸는데,
제출하기 전에 문제를 다시 한번 읽고, 반례도 대입해본뒤 제출해보자!
'알고리즘 문제 풀기 > 백준(Baekjoon)' 카테고리의 다른 글
[백준 알고리즘] 1679. 숨바꼭질 (0) | 2021.03.27 |
---|---|
[백준 알고리즘] 15663. N과 M (9) (0) | 2021.03.27 |
[백준 알고리즘] 2589. 보물섬 _ 파이썬 (0) | 2021.03.25 |
[백준 알고리즘] 2468.안전영역 (0) | 2021.03.25 |
[백준 알고리즘] 2583. 영역구하기 (0) | 2021.03.25 |