티스토리 뷰
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
좀 더 응용된 백트래킹 문제이다. N-Queen처럼 한가지 함수를 더 활용하여 모음 1개, 자음 2개를 만족하지 않으면 뱉어내는 방식으로 구현하려다가, 함수 속에 추가 변수를 넣어 모음과 자음의 개수를 카운트, 그리고 만족하지 않으면 추가하지 않는 방식으로 구현하였다.
L, C = map(int ,input().split())
alpha = list(map(str, input().split()))
alpha.sort()
visit = [False] * C
ans = list()
# n: 알파벳 개수, word: 만들어진 단어, a, b: 자음과 모음의 개수, idx: 마지막 알파벳의 위치
def dfs(n, word, a, b, idx):
# 개수가 맞을 때, 자음과 모음의 개수를 충족할 때 추가
if n == L:
if a >= 1 and b >= 2:
ans.append(word)
return
for i in range(n, C):
if not visit[i]:
visit[i] = True
# 마지막 알파벳의 위치가 현재 알파벳의 위치보다 앞에 있어야만 추가
if idx < i:
if alpha[i] in ["a", "e", "i", "o", "u"]:
dfs(n + 1, word + alpha[i], a + 1, b, i)
else:
dfs(n + 1, word + alpha[i], a, b + 1, i)
visit[i] = False
dfs(0, "", 0, 0, -1)
print(*ans, sep= "\n")
'PS (Problem Solving)' 카테고리의 다른 글
[BOJ, Python] 비트마스크(BitMask) 정리 ( with 11723 - 집합 ) (0) | 2022.11.14 |
---|---|
[BOJ, Python] 2178 - 미로 탐색 ( with BFS ) (0) | 2022.11.14 |
[BOJ, Python] 2580 - 스도쿠 ( with Backtracking ) (0) | 2022.10.20 |
[BOJ, Python] 9663 - N-Queen ( with Backtracking ) (0) | 2022.10.12 |
[BOJ, Python, Swift] 12865 - 평범한 배낭 ( with DP, Knapsack ) (0) | 2022.09.29 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- DP
- 알고리즘
- xcode
- 보라매사옥
- 정보시각화
- c++
- PS
- DFS
- ios
- CSS
- 백트래킹
- SceneDelegate
- how to remove border of tabbarcontroller
- 백준
- swift
- CSV
- 하노이탑이동순서
- Python
- TIP
- 파이썬
- 곱셈의 역원
- D3
- 자료구조
- SVG
- pyrebase
- BOJ
- Array
- HTML
- how to start without storyboard
- Javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함