백준 - 1759

GGob2._.·2023년 4월 11일
0

algorithm

목록 보기
2/55

문제 설명

주어진 문자열에서 만들 수 있는 암호열에 대해 최소 1개 이상의 모음, 최소 2개 이상의 자음을 만족하는 암호열을 출력하는 문제다.

초기 접근방식

처음에는 단순히 주어진 문자열에서 가능한 모든 경우의 수를 어떻게 생각해야할지 막막했고, 코드를 못 썼다.

해결방안

파이썬 itertools 라이브러리의 combinations 메소드를 이용해, 문자열에서 길이 l에 해당하는 모든 암호의 경우의 수를 뽑아낼 수 있었다.

해결 과정은 다음과 같다.

  • 모음에 해당하는 배열을 선언한다.
  • 주어진 문자열을 입력받고, 정렬한다. (문제에서 정렬 조건이 있음)
  • combinations를 이용해 길이 l에 해당하는 모든 경우의 수를 추출하는 for문을 작성한다.
  • 추출한 경우에서 최소 모음 1개, 최소 자음 2개를 만족하는지 판별하고, 만족하면 출력한다.

작성한 코드

from itertools import combinations
import sys

input = sys.stdin.readline

vowels = ('a', 'e', 'i', 'o', 'u')

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

char_list = list(input().split())
char_list.sort()

# 가능한 경우의 수 추출 
for char in combinations(char_list, l):
   count = 0
   # 모음 개수 기반 판별
   for i in char:
       if i in vowels:    
           count+= 1
   if count >= 1 and count <= l-2:
       print("".join(char))
profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글