[백준/파이썬] 1759 암호 만들기

bye9·2021년 1월 27일
0

알고리즘(코테)

목록 보기
27/130

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


알고리즘 분류

  • 브루트포스

문제풀이

주어진 문자들을 증가하는 순서로 배치하기 위해 우선 숫자로 바꿔준다.(num_alpha)
->[0,2,8,18,19,22]

그리고 증가하는 순서로 배치하고 다시 알파벳으로 바꿔준다.
->['a', 'c', 'i', 's', 't', 'w']

조합을 위해서 combinations모듈을 사용해주었다.
->['acis', 'acit', 'aciw', 'acst', 'acsw', 'actw', 'aist', 'aisw', 'aitw', 'astw', 'cist', 'cisw', 'citw', 'cstw', 'istw']

해당 리스트에서 각 단어, 단어에서 문자별로 모음, 자음을 판단하여 최소 한 개의 모음, 최소 두 개의 자음 요건을 충족할 경우 결과 리스트에 추가하고 다음 단어로 넘어간다.

소스코드

from itertools import combinations

l,c=map(int, input().split())
alpha=list(map(str, input().split()))
vowel=['a','e','i','o','u']

num_alpha=[]
for i in alpha:
  num_alpha.append(ord(i)-ord('a'))

num_alpha.sort()

alpha=[]
for i in num_alpha:
  alpha.append(chr(i+ord('a')))

lst=list(map(''.join, combinations(alpha, l)))

result=[]
for word in lst:
  cnt_vowel=0
  cnt_else=0
  for single in word:
    if single in vowel:
      cnt_vowel+=1
    elif single not in vowel:
      cnt_else+=1
    if cnt_vowel>=1 and cnt_else>=2:
      result.append(word)
      break

for i in result:
  print(i)

0개의 댓글