본문 바로가기
Algorithm

[Brute Force] 백준 1759. 암호 만들기 - Python

by jangThang 2022. 1. 17.
반응형

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    10819번: 차이를 최대로

    첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     암호는 "오름차순"으로 서로 다른 L개의 알파벳 소문자들로 구성되며, 최소 한 개의 모음(a, e, i, o, u)과 최소 두개의 자음으로 구성되어 있습니다. 입력은 암호의 길이인 L과 사용 가능한 알파벳이 주어집니다. 단순히 길이가 L인 알파벳 나열이므로, 브루트 포스 접근법으로 풀이합니다.

     

    2022.01.16 - [Algorithm] - [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

     

    [Algorithm] 브루트 포스(Brute Force)는 노가다 기법?

    1. 브루트 포스란?  Brute(짐승 같은, 난폭한) + Force(힘, 폭력)의 합성어입니다. 무식하게 푸는 기법으로, '노가다'에 가까운 접근법입니다. 모든 경우의 수를 시험해보며 문제를 해결합니다.  브루

    star7sss.tistory.com

      오름차순으로 정렬되므로, 순서가 없는 '조합'으로 경우의 수를 구합니다.

     

     

     

    3. 코드

    from itertools import combinations
    
    L, C = map(int, input().split())
    alphabet = list(input().split())
    alphabet.sort()
    
    arr = list(combinations(alphabet, L))
    answer = list()
    for lst in arr:
        vowels = 0
        consonants = 0
        for i in lst:
            if (i=='a') | (i=='e') | (i=='i') | (i=='o') | (i=='u'): 
                vowels += 1
            else:
                consonants += 1
        if (vowels > 0) & (consonants > 1):
            answer.append(''.join(lst))
            
    for i in answer:
        print(i)

     조합(Combinataion)을 사용하기 위해, 파이썬 라이브러리 itertools를 이용합니다. 

     

    itertools.combinations(lst, n): lst 리스트에서 n개를 뽑는 조합

     L개의 앞파벳 조합 중, 최소 1개의 모음과 2개의 자음으로 구성된 배열만 오름차순으로 출력합니다.

     

     

     

    반응형

    댓글