STUDY/Algorithm

[백준] 1759 암호만들기

sinawi95 2021. 3. 5. 14:55
728x90

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

L, C = map(int, input().split())
char = input().split()
char.sort()

def comb(index=0, arr=[], limit=L):
    if index == limit:
        vowel = {'a','e','i','o','u'}
        vow, con = 0, 0
        for i in range(limit):
            if arr[i] in vowel:
                vow += 1
            else:
                con += 1
        if vow < 1 or con < 2: return
        print(''.join(arr))
    else:
        for i in range(index, C):
            if arr and ord(arr[-1]) >= ord(char[i]): continue
            comb(index+1, arr+[char[i]])
comb()

조합 알것같으면서도 잘 모르겠다

그리고 문제를 제대로 안읽어서 여러번 틀렸다.

조합에 쓰이는 알파벳이 오름차순으로 순서이어야하고, 자음과 모음의 최소 개수를 파악해야했다.

백트래킹으로 뚝딱뚝딱 하다보니 완성

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

[백준] 2589 보물섬  (0) 2021.03.08
[백준] 2468 안전영역  (0) 2021.03.06
[백준] 3980 선발명단  (1) 2021.03.05
[백준] 6603 로또  (0) 2021.03.04
[백준] 2583 영역구하기  (0) 2021.03.04