Kim Seon Deok

[백준] 1759 암호만들기 본문

python/Algorithm

[백준] 1759 암호만들기

seondeok 2022. 1. 29. 22:38

 

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

 

 

1759번: 암호 만들기

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

www.acmicpc.net

1. 생성할 암호 길이l 과 t=사용한 알파벳 갯수c 를 입력받음

2. 길이가 c이면서 오름차순인 리스트 word

3. 모음 a e i o u를 저장한 리스트 m

4. 리스트 내에서 자음과 모음의 갯수를 세리는 함수 cnt

5. combination 함수를 이용해 word리스트에서 c 개만 골라 만들어질 수 있는 모든 경우를 생성

6. 모음이 1개 이상, 자음이 2개 이상인 것들만 저장하는 리스트 finals

from itertools import combinations

l,c = map(int,input().split()) # l : 암호길이(1모음, 2 자음)  c: 사용한 알파벳 갯수(이중 ㅣ개를 조합)


word = sorted(list(map(str,input().split())))  #오름차순으로 정렬

    

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


def cnt(password):  #튜플을 인자로 받음, 모음 자음 갯수를 원소로 하는 리스트 반환
    result = []
    mm = 0  # 모음 갯수
    zz = 0  # 자음 갯수
    for i in range(l):
        if password[i] in m:
            mm += 1
        else:
            zz += 1
    result.append(mm)
    result.append(zz)
    return result

 

example = list(combinations(word,l))  # 모든 경우

final = [] # 모든 경우를 cnt함수에 넣은 결과가 들어간 리스트
for i in range(len(example)):
    final.append(cnt(example[i]))

finals = []  # 모음이 1개이상, 자음이 2개 이상인 조건을 만족하는 경우를 저장하는 리스트
for i in range(len(final)):
    if final[i][0] >= 1 and final[i][1] >= 2:
        
        finals.append(list(example[i]))  # 튜플을 리스트로 변경
for i in range(len(finals)):
    print("".join(finals[i]))

 

 

'python > Algorithm' 카테고리의 다른 글

[백준] 17371 이사  (0) 2022.02.01
[백준] 5397 키로거  (0) 2022.01.31
[백준] 2503 숫자 야구  (0) 2022.01.28
[백준] 14889 스타트와 링크  (0) 2022.01.26
[백준] 20436 ZOAC 3  (0) 2022.01.22
Comments