본문 바로가기
문제 풀이/백준(BOJ)

[Python] 백준 1759번 : 암호 만들기

by 희조당 2022. 7. 29.
728x90

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

 

1759번: 암호 만들기

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

www.acmicpc.net


💡 문제 풀이

백트래킹 문제이다.

 

주어진 길이까지 백트래킹을 실시하고 주어진 조건만 맞추면 된다.

백트래킹의 기본이라고 볼 수 있다.

✔️ 느낀 점

브루트포스인 줄 알고 풀었는데 백트래킹 문제였다.

💻 코드

import sys

l, c = map(int, sys.stdin.readline().split())
words = sorted(list(map(str, sys.stdin.readline().split())))
answer = []

def back_tracking(cnt, idx):
    if cnt == l:
        vo, co = 0, 0

        for i in range(l):
            if answer[i] in ['a', 'e', 'i', 'o', 'u']:
                vo += 1
            else:
                co += 1

        if vo >= 1 and co >= 2:
            print("".join(answer))

        return

    for i in range(idx, c):
        answer.append(words[i])
        back_tracking(cnt + 1, i + 1)
        answer.pop()

back_tracking(0, 0)

댓글