IT recording...

[BOJ] 1759 암호 만들기 - python 본문

Algorithm

[BOJ] 1759 암호 만들기 - python

I-one 2021. 12. 2. 21:04

1759번: 암호 만들기

 

1759번: 암호 만들기

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

www.acmicpc.net

풀이

  1. 딱 보자마자 combination 이용해야겠다고 생각 든 문제
import sys
from itertools import combinations

def input():
    return sys.stdin.readline().rstrip()

L,C = map(int,input().split(" "))
letter = list(input().split(" "))

standard_vowels = {"a","e","i","o","u"}
vowel = set() #모음
consonant = set() #자음

for l in letter: #모음,자음 분류하기
    if l in standard_vowels:
        vowel.add(l)
    else:
        consonant.add(l)

answer = []
for i in range(1,len(vowel)+1):
    if L-i >= 2:
        vowel_collection = list(combinations(vowel,i))
        consonant_collection = list(combinations(consonant,L-i))
        for vc in vowel_collection:
            for cc in consonant_collection:
                answer.append(vc+cc)

answer_str = []
for a in answer:
    answer_str.append(''.join(sorted(a)))
answer_str.sort()

for a in answer_str:
    print(a)

다른 사람 풀이

from itertools import combinations

L, C = map(int, input().split())
chars = sorted(input().split())
for string in combinations(chars, L):
    aeiou, not_aeiou = 0, 0
    for i in range(len(string)):
        if string[i] in 'aeiou':
            aeiou += 1
        else:
            not_aeiou += 1
    if aeiou >= 1 and not_aeiou >= 2:
        print(''.join(string))

얻어가는 것

  • Combination
    from itertools import combinations
    
    vowel_collection = list(combinations(vowel,i))
    ​
  • string에 특정 문자 존재하는지 확인하기
    for s in string:
    	if s in 'aeiou':
    		#존재
    	else:
    		#존재x
    ​
  • sort / sorting → list, str 소팅이 가능하다.
    #sort
    list.sort() #반환값이 없다.
    list.sort(reverse=False) #내림차순
    
    #sorted
    result = sorted(list) #반환값이 존재한다.
    result = sorted(list,reverse = False) #내림차순
    + 튜플의 소팅이 가능함.
    
  • 리스트 합치기
    one = [1,2]
    two = [3,4,5]
    
    byPlus = one **+** two #[1,2,3,4,5]
    byExtend = one.**extend**(two) #[1,2,3,4,5]
    ​
     

느낀점

"211009"

소요 시간 : 30min

  • 간단한 문자열에 관한 문제였다.
  • sort에 대한 개념과 문자열에 대한 개념을 다시 생각할 수 있었던 문제

'Algorithm' 카테고리의 다른 글

[BOJ] 11659 구간 합 구하기 4 - python  (0) 2021.12.02
[BOJ] 2580 스도쿠 - python  (0) 2021.12.02
[BOJ] 1920 수 찾기 - python  (0) 2021.12.02
[BOJ] 1039 교환 - python  (0) 2021.12.02
[BOJ] 1103 게임 - python  (0) 2021.12.02
Comments