조합을 배우고 이 문제를 푸는데 왜 이문제가 골드 난이도인지는 이해가 되지 않았다. 근데 또 예시 입력 출력이 같은데 자꾸 코드가 틀려서 다시 한번 문제를 보니까, 최소 한개의 모음 최소 두개의 자음인 것만 출력하는 것이었다. 이런 문제를 잘 안풀어서 그런지, 아니면 조건이 꽤 있어서 그런지 중요한 것을 놓쳤다.
# 백준 1759번 암호 만들기
def combination(index, level):
global lst, need_value_num, total_value_num
if level == need_value_num:
print("".join(choose))
return
for i in range(index, total_value_num):
choose.append(lst[i])
combination(i+1, level+1)
choose.pop()
# 순서대로 조합에 필요한 수, 원소의 총 개수
need_value_num, total_value_num = map(int, input().split())
lst = list(input().split())
if need_value_num or total_value_num == 0:
exit()
# 리스트로 받은 것을 사전순으로 정렬해야 한다. 신기하게 문자열도 sort()함수가 가능
lst.sort()
choose = []
combination(0, 0) # index, level
# 백준 1759번 암호 만들기
vowel_lst = ['a', 'e', 'i', 'o' ,'u']
def is_possible():
global need_value_num, choose
vowel = 0
for c in choose: # choose에서 문자 하나씩 빼면서
if (c in vowel_lst):
vowel += 1
consonant = need_value_num - vowel
return (consonant >= 2 and vowel >= 1)
def combination(index, level):
global lst, need_value_num, total_value_num
if level == need_value_num:
if is_possible(): # 모음 1개 이상, 자음 두개 이상인지 확인하는 함수
print("".join(choose))
return
for i in range(index, total_value_num):
choose.append(lst[i])
combination(i+1, level+1)
choose.pop()
# 순서대로 조합에 필요한 수, 원소의 총 개수
need_value_num, total_value_num = map(int, input().split())
lst = list(input().split())
if need_value_num == 0 or total_value_num == 0:
exit()
# 리스트로 받은 것을 사전순으로 정렬해야 한다. 신기하게 문자열도 sort()함수가 가능
lst.sort()
choose = []
combination(0, 0) # index, level
지금도 진행형이지만, 이전에는 갑상선 + 소화 이슈로 힘들어서 공부와 알바를 모두 포기했었다. 지금은 점점 좋아지고 있고, 학교갈 준비를 해야하기 때문에 다시 시작했다. 이번 문제는 조합 문제에서 조금의 생각이 필요한 문제이다. 그렇게 어렵진 않은데, 오랜만에 풀어서 그런지 문법적인 부분에서 많이 틀렸다.