ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 1759 암호 만들기
    Algorithm/백준 2023. 1. 18. 21:23

    1. 문제 📚

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

    2. 입출력 예 📋

    3. 알고리즘 ✅

    백트래킹 문제이므로 조건을 제대로 봐야한댜

    조건1. 중복된 문자가 없을 것

    조건2. 알파벳이 암호에서 증가하는 순서대로 배열 됐을 것

    조건3. 최소 한개의 모음 최소 2개의 자음

    4. 소스코드 💻

    처음에 실패해서 뭐지 했는데 조건3을 안따졌었다 아래는 백준 질문게시판에 있던 반례이다

    input:
    3 6
    a e i c d z
    
    output:
    acd
    acz
    adz
    cde
    cdi
    cez
    ciz
    dez
    diz​
    import sys
    
    input = sys.stdin.readline
    
    L, C = map(int, input().strip().split())
    alphabet = sorted(input().split())
    
    visited = [False for _ in range(C)]
    aeiou_arr = ['a', 'e', 'i', 'o', 'u']
    password = []
    
    def aeiou_check(password):
        aeiou_count = 0
        rest_count = 0
        for p in password:
            if p in aeiou_arr:
                aeiou_count += 1
            else:
                rest_count += 1
        return [aeiou_count, rest_count]
    
    def dfs(start, count):
        global alphabet
        aeiou_count, rest_count = aeiou_check(password)
        # 조건3)
        if len(password) == L and  aeiou_count > 0 and rest_count >= 2:
            print(''.join(password))
            return
    	
        # 조건2)
        for i in range(start, C):
        	# 조건1)
            if visited[i]:
                continue
    
            password.append(alphabet[i])
            visited[i] = True
            dfs(i, count + 1)
            visited[i] = False
            password.pop()
    
    dfs(0, 0)

    'Algorithm > 백준' 카테고리의 다른 글

    [Python] 15657 N과 M (8)  (0) 2023.01.20
    [Python] 1987 알파벳(dfs)  (0) 2023.01.19
    [Python] 3190 뱀  (1) 2023.01.18
    [Python] 1744 수묶기  (0) 2022.12.28
    [Python] 1541 잃어버린 괄호  (0) 2022.12.27

    댓글

Designed by Tistory.