티스토리 뷰

PS/BOJ Python

1759번 - 암호 만들기

zpqmdh 2023. 4. 2. 14:10

https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

주어진 알파벳으로 만들수 있는 모든 경우의 수를 조사한다. (브루트포스)

그 경우가 유망하면 계속 탐색하고 그렇지 않으면 더 조사하지 않는다. (백트래킹)

모음의 개수만 생각했는데 자음의 개수도 고려해줘야 한다.

따라서 chk라는 배열을 선언하여 자음의 개수와 모음의 개수 모드를 검사하였다.

# 암호 만들기
import sys
input = sys.stdin.readline
L, C = map(int, input().split())
vowels = ['a', 'e', 'i', 'o', 'u']
chs = sorted(list(input().split())) # sort
visited = [False for _ in range(C)]
password = []
chk = [0, 0] # 자음의 개수, 모음의 개수
def solve(idx, cnt):
    global chk
    if cnt == L:
        # check
        for v in vowels:
            if v in password:
                chk[1] += 1
        chk[0] = len(password) - chk[1]
        if chk[0] >= 2 and chk[1] >= 1:
            print(''.join(password))
        chk = [0, 0] # initialize
        return
    for i in range(idx, C):
        if visited[i] == False:
            password.append(chs[i])
            visited[i] = True
            solve(i, cnt+1)
            password.pop()
            visited[i] = False
solve(0, 0)

'PS > BOJ Python' 카테고리의 다른 글

10816번 - 숫자 카드 2  (0) 2023.04.03
1158번 - 요세푸스 문제  (0) 2023.04.03
2839번 - 설탕 배달  (0) 2023.04.01
1358번 - 하키  (0) 2023.03.31
1015번 - 수열 정렬  (0) 2023.03.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함