일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Galera Cluster
- Java
- mongoDB
- 디자인 패턴
- JavaScript
- Algorithm
- 운영체제
- MSA
- Proxy
- 자료구조
- JPA
- design pattern
- Kafka
- 백준
- C
- 자바
- OS
- 알고리즘
- spring webflux
- c언어
- 파이썬
- Data Structure
- IT
- redis
- 컴퓨터구조
- Heap
- 네트워크
- MySQL
- Spring
- react
Archives
- Today
- Total
시냅스
백준 boj 1759 - 암호 만들기 (파이썬, python) 본문
https://www.acmicpc.net/problem/1759
백트래킹을 이용한 문제였다.
주어지는 6개의 문자 중에 4개를 뽑아 조합해야 하는데,
문자 4개 중 최소 2개는 자음, 1개는 모음이 되어야 한다.
백트래킹을 통해 모든 가능성을 체크하면서,
모음을 포함하는지에 대한 여부와 자음을 2개 이상 포함하는지에 대한 여부를 함수로 판단하였고,
위 조건에 만족되는 경우에만 출력 할 수 있게 해주었다.
code
vowel = ['a', 'e', 'i', 'o', 'u']
l, c = map(int, input().split())
words = list(map(str, input().split()))
words.sort()
ans = []
visited = [0] * c
def is_vowel(ans): # 모음 포함 여부
for i in range(len(vowel)):
if vowel[i] in ans:
return 1
return 0
def is_two_cons(ans): # 자음 2개 포함 여부
cnt = 0
for i in range(len(ans)):
if ans[i] not in vowel: # 모음이 아니면 cnt를 1 더한다 = 자음
cnt += 1
if cnt >= 2:
return 1
else:
return 0
def dfs(iter):
if len(ans) == l:
if is_vowel(ans) and is_two_cons(ans): # 모음 1개 이상, 자음 2개 이상
print(''.join(ans))
return
for i in range(iter, c):
if not visited[i]:
ans.append(words[i])
visited[i] = 1
dfs(i)
visited[i] = 0
ans.pop()
dfs(0)
'알고리즘' 카테고리의 다른 글
백준 boj 15661 - 링크와 스타트 (파이썬, python) (0) | 2022.03.01 |
---|---|
백준 boj 14501 - 퇴사 (파이썬, python) (0) | 2022.02.23 |
백준 boj 15663 - N과 M(9) (파이썬, python) (0) | 2022.02.19 |
백준 boj 1748 - 수 이어 쓰기 1 (파이썬, python) (0) | 2022.02.11 |
백준 boj 9095 - 1, 2, 3 더하기 (파이썬, python) (0) | 2022.02.10 |
Comments