Coding Test/baekjoon

[백준 1759] 암호 만들기 - python (solved.ac - 골드 5)

조용장 2022. 4. 14. 22:50

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

 

1759번: 암호 만들기

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

www.acmicpc.net

풀이

문제를 보았을때 알수있는 힌트

문제를 보고 모든 자리에 한개씩 놓으면서 가능성있는 암호들을 모두 구하는 문제였다. 

DFS를 이용하여 문제를 풀면 한자리수씩 움직이며 찾을 수 있을것이라고생각이 들었고 들어갔다가 다시 나오게되면 방문한곳에서 나올수있게 하였다. 또한 시작하는 위치 count 를 통해 뒤에서 부터 반복하여 작업이 안되게 하였다.

 

import sys

input = sys.stdin.readline

l,c = map(int,input().split())

n = list(input().split())
visited=[0 for _ in range(c)]
result=[]
n.sort()
def dfs(x,count):
    if l == x:
        vo = 0
        co = 0
        for i in range(l):
            if result[i] in 'aeiou': vo += 1
            else: co += 1
        if vo >= 1 and co >= 2:
            print(''.join(result))

    for i in range(count, c):
        if visited[i] == 0:
            result.append(n[i])
            visited[i] = 1
            dfs(x + 1, i + 1)
            visited[i] = 0
            del result[-1]

dfs(0,0)

https://github.com/dydwkd486/coding_test/blob/main/baekjoon/baekjoon1759.py

 

GitHub - dydwkd486/coding_test: 코딩테스트 공부한 내용 정리

코딩테스트 공부한 내용 정리. Contribute to dydwkd486/coding_test development by creating an account on GitHub.

github.com