MapleStory Finger Point

[BOJ] #1759 - 암호 만들기

2021. 6. 29. 13:58Problem Solving/Online Judge

 

1759번: 암호 만들기

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

www.acmicpc.net

 

 

** 문제 유형

  • 백트래킹

 

** 풀이

  1. C개의 문자들이 주어졌을 때, 가능한 L 길이의 암호를 모두 찾아야 함
  2. 따라서 C개의 문자들 중에서 L개를 선택하는 모든 조합을 고려
    • 파이썬의 조합(combinations) 라이브러리를 사용하면 간단히 해결 가능
    • 혹은 DFS를 이용하여 조합 함수 구현 가능

 

from itertools import combinations as comb

l, c = map(int, input().split())
array = list(input().split())

# 가능한 암호를 사전식으로 출력해야 하므로 정렬 수행
array.sort()

vowels = ['a', 'e', 'i', 'o', 'u']

# 길이가 l인 모든 암호 조합 확인
for pwd in list(map(''.join, comb(array, l))):
    cnt = 0

    # 모음의 개수 세기
    for i in pwd:
        if i in vowels:
            cnt += 1

    # 최소 한 개의 모음과 최소 2개의 자음이 있는 경우 출력
    if cnt >= 1 and cnt <= l - 2:
        print(pwd)

 

 

 

'Problem Solving > Online Judge' 카테고리의 다른 글

[프로그래머스] 주식가격  (0) 2024.08.15
[프로그래머스] 실패율  (0) 2024.08.09
[BOJ] #1987 - 알파벳  (0) 2021.06.29
[BOJ] #9663 - N-Queen  (0) 2021.06.29
[BOJ] #1092 - 배  (0) 2021.06.25