728x90
문제 : https://www.acmicpc.net/problem/1759
코드
import sys
sys.setrecursionlimit(10**8) # 10^8 까지 늘림.
input = sys.stdin.readline
def is_correct_password(password):
vowel = 0
consonant = 0
for p in password:
if p in 'aeiou':
vowel += 1
else:
consonant += 1
if vowel >= 1 and consonant >= 2:
return True
return False
def backtracking(idx, password):
# password 가 다 채워졌을 때
if idx == L:
# 조건 검사
if is_correct_password(password):
print("".join(password))
return
for i in range(len(characters)):
# 이미 들어가있는 글자면
if checked[i]:
continue
# 오름차순 정렬이 아니면
if idx > 0 and ord(password[-1]) > ord(characters[i]):
continue
# 패스워드에 추가하고
password += characters[i]
checked[i] = True
# 백트래킹
backtracking(idx+1, password)
# 돌아오면 다시 돌려놈
checked[i] = False
password = password[:-1]
L, C = map(int, input().split(" "))
characters = sorted(list(map(str, input().strip().split(" "))))
checked = [False] * C
backtracking(0, '')
'알고리즘 풀기' 카테고리의 다른 글
BOJ 1088 쉬운 계단 수 python3 (0) | 2020.04.17 |
---|---|
BOJ 1149 RGB거리 python3 (0) | 2020.04.17 |
[백준] 6603 로또 python3 (0) | 2020.03.14 |
[백준] 15649 N과 M python3 (0) | 2020.03.14 |