[BaekJoon] 백준 1759번 암호 만들기
문제: www.acmicpc.net/problem/1759
내코드
- 이전 백트래킹 문제들과 푸는 방식은 비슷하지만 포인트는 크게 두가지 였다.
- 자음과 모음의 최소 포함 개수가 정해져 있었다는 것
- 사전 순으로 출력해야 한다는 것
- consonant_n, vowel_n 변수를 따로 선언해줘서 자음 모음 개수를 저장해주고 마지막에 개수를 확인해 준뒤 출력해줬다.
- 또한 out변수에 append하기 전에 out 리스트의 마지막 문자보다 현재 입력하려고 하는 문자가 사전순으로 뒤에 있는지 확인해 준뒤 입력해줬다.
- 문제를 풀면서 맞게 풀었다고 생각했는데 틀렸다고 나왔다. 처음 입력받은 문자열 리스트를 sorted()로 정렬해주니 해결되었다.
# BaekJoon1759.py 암호 만들기
l, c = map(int, input().split())
arr = sorted(input().split())
visited = [False] * c # 사용 여부 저장
vowel = ['a', 'e', 'i', 'o', 'u'] # 모음
consonant_n = 0 # 자음 개수
vowel_n = 0 # 모음 개수
out = [] # 출력 배열 저장
def solve(con, vow):
if len(out) is l:
# 최소 한개의 모음, 최소 두개의 자음으로 구성하기 위한 조건
if con > 1 and vow > 0:
print(''.join(map(str, out)))
return
else:
for i in range(c):
# 방문했다면 pass
if visited[i]:
continue
# 사전순으로 구성하기 위한 조건
if len(out) != 0 and out[-1] > arr[i]:
continue
# 방문했다고 표시
visited[i] = True
out.append(arr[i])
# 모음, 자음 여부 기록
if arr[i] in vowel:
vow += 1
# 다음 문자 정하기 위해
solve(con, vow)
vow -= 1
else:
con += 1
solve(con, vow)
con -= 1
visited[i] = False
out.pop()
solve(consonant_n, vowel_n)
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 12100번 2048 (Easy) (0) | 2021.04.17 |
---|---|
[BaekJoon] 백준 13460번 구슬 탈출 2 (0) | 2021.04.16 |
[BaekJoon] 백준 6603번 로또 (0) | 2021.02.10 |
[BaekJoon] 백준 15651번 N과 M(3) (0) | 2021.02.03 |
[BaekJoon] 백준 15650번 N과 M (2) (0) | 2021.02.01 |