Notice
Recent Posts
Recent Comments
Link
꾸준하게 거북이처럼
백준 애너그램 파이썬 본문
6443번: 애너그램
첫째 줄에 단어의 개수 N 이, 둘째 줄부터 N개의 영단어가 들어온다. 영단어는 소문자로 이루어져 있다. 단어의 길이는 20보다 작거나 같고, 애너그램의 수가 100,000개 이하인 단어만 입력으로 주
www.acmicpc.net
백트래킹 문제로, 알파세 사전순으로 출력은 입력받을 때, sort를 적용하면 된다.
하지만 중복된 문자열은 출력 되면 안되기 때문에 이 조건에서 고민을 했던것 같다. 시간 초과가 나지 않으려면, 중복조건은 피해야하는데 어떻게 풀 수 있을까?
'aabc' 이 입력일 때,
중복된 문자열을 피하려면, 재귀함수를 호출하며 가지가 뻗어나갈 때, 해당 depth에서 같은 문자가 가지에 포함되면 안된다. 하지만 주어진 문자열의 문자들을 다 사용해서 문자열을 만들어야하는 것이 목표다.
이 생각으로부터 dictionary를 사용해서 현재 사용할 수 있는 각 알파벳의 개수를 +-1 을 해서 문자열을 만들어 나갈 수 있다.
dictionary를 사용하면 중복을 제거 할 수 있고, 각 알파벳에 대한 개수를 나타냄으로써 개수가 0보다 크면, 이어서 가지를 뻗어 나갈 수 있다.
def dfs(L,res):
if L == len(arr):
print(''.join(res))
return
for v in check:
if check[v]:
check[v] -= 1
dfs(L+1,res+[v])
check[v] += 1
n = int(input())
for _ in range(n):
arr = list(input())
arr.sort()
check = {}
for i in arr:
if i not in check:
check[i] = 1
else:
check[i] += 1
dfs(0,[])
[baekjoon] 백준 6443번(파이썬): 애너그램
문제 9081번: 단어 맞추기 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 10)가 주어진다. 각 테스트 케이스는 하나의 단어가 한 줄로 주어진다. 단어는 알파벳 A~Z 대문자로만 이루어지며 항
fre2-dom.tistory.com
'Algorithm 문제 & 공부 > 완전탐색' 카테고리의 다른 글
백준 사다리조작 파이썬 (0) | 2023.07.28 |
---|---|
프로그래머스 광물캐기 python (0) | 2023.04.20 |
백준 15661번 링크와 스타트 (0) | 2022.10.03 |
백준 14889번 파이썬 - 스타트와 링크 (1) | 2022.09.30 |
백준 14501 파이썬 - 퇴사 (1) | 2022.09.30 |
Comments