[BOJ, Python] 1759 - 암호 만들기 ( with Backtracking )

2022. 10. 23. 15:58·PS (Problem Solving)
728x90
 

1759번: 암호 만들기

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

www.acmicpc.net

좀 더 응용된 백트래킹 문제이다. N-Queen처럼 한가지 함수를 더 활용하여 모음 1개, 자음 2개를 만족하지 않으면 뱉어내는 방식으로 구현하려다가, 함수 속에 추가 변수를 넣어 모음과 자음의 개수를 카운트, 그리고 만족하지 않으면 추가하지 않는 방식으로 구현하였다.

L, C = map(int ,input().split())
alpha = list(map(str, input().split()))
alpha.sort()
visit = [False] * C
ans = list()

# n: 알파벳 개수, word: 만들어진 단어, a, b: 자음과 모음의 개수, idx: 마지막 알파벳의 위치
def dfs(n, word, a, b, idx):
	# 개수가 맞을 때, 자음과 모음의 개수를 충족할 때 추가
    if n == L:
        if a >= 1 and b >= 2:
            ans.append(word)
        return
        
    for i in range(n, C):
        if not visit[i]:
            visit[i] = True
            # 마지막 알파벳의 위치가 현재 알파벳의 위치보다 앞에 있어야만 추가
            if idx < i:
                if alpha[i] in ["a", "e", "i", "o", "u"]:
                    dfs(n + 1, word + alpha[i], a + 1, b, i)
                else:
                    dfs(n + 1, word + alpha[i], a, b + 1, i)
            visit[i] = False
            
dfs(0, "", 0, 0, -1)
print(*ans, sep= "\n")
728x90
저작자표시 (새창열림)

'PS (Problem Solving)' 카테고리의 다른 글

[BOJ, Python] 비트마스크(BitMask) 정리 ( with 11723 - 집합 )  (1) 2022.11.14
[BOJ, Python] 2178 - 미로 탐색 ( with BFS )  (1) 2022.11.14
[BOJ, Python] 2580 - 스도쿠 ( with Backtracking )  (0) 2022.10.20
[BOJ, Python] 9663 - N-Queen ( with Backtracking )  (0) 2022.10.12
[BOJ, Python, Swift] 12865 - 평범한 배낭 ( with DP, Knapsack )  (0) 2022.09.29
'PS (Problem Solving)' 카테고리의 다른 글
  • [BOJ, Python] 비트마스크(BitMask) 정리 ( with 11723 - 집합 )
  • [BOJ, Python] 2178 - 미로 탐색 ( with BFS )
  • [BOJ, Python] 2580 - 스도쿠 ( with Backtracking )
  • [BOJ, Python] 9663 - N-Queen ( with Backtracking )
100두산
100두산
출발하게 만드는 힘이 동기라면, 계속 나아가게 만드는 힘은 습관이다.
  • 100두산
    정상에서 보자 ✈️
    100두산
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • Life (6)
        • living (1)
      • Research (6)
      • AI (20)
      • Dev (45)
        • iOS (28)
        • Web (4)
        • flutter (9)
        • etc (4)
      • PS (Problem Solving) (23)
      • Computer Science and Engine.. (21)
        • Data Structures and Algorit.. (13)
        • OOP (Object Oriented Progra.. (8)
      • etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    파이썬
    swift
    PS
    자료구조
    BOJ
    ios
    Python
    오블완
    xcode
    AI
    백준
    티스토리챌린지
    백트래킹
    Challenger
    SKT
    TIP
    SKTelecom
    c++
    D3
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
100두산
[BOJ, Python] 1759 - 암호 만들기 ( with Backtracking )
상단으로

티스토리툴바