기본적으로 문자열을 쌓거나 줄이는 방법은 dfs가 기본이다.
1번풀이 : 하나씩 쌓는 방법
left, right로 하나씩 쌓아가며 이어붙힌다.
다 붙히면 중복 없어지고 종료
import sys
input = sys.stdin.readline
def dfs(left, right, string):
if len(string) == target:
answers.add(string)
return
if left > 0:
dfs(left - 1, right, string + N[left - 1:right + 1])
if right < n:
dfs(left, right + 1, string + N[left: right + 2])
N = input().rstrip()
n = len(N)
target = n * (n + 1) // 2
answers = set()
for i in range(n):
dfs(i, i, N[i])
print(len(answers))
2번 풀이 : 하나씩 지우는 방법
앞이나 뒤 분기를 나눠하나씩 지우다가 남은 문자가 다 같은 문자면 압축시키고 종료
def dfs(string):
global cnt
if len(n) == 1:
cnt +=1
return
L = set(list(string))
if len(L) == 1:
cnt+=1
return
else:
dfs(string[1:])
dfs(string[:-1])
n = input()
cnt = 0
dfs(n)
print(cnt)
'practivceAlgorithm > 백준' 카테고리의 다른 글
[백준][Python] 1817 짐챙기는 숌 (0) | 2021.10.07 |
---|---|
[백준][Python] 1613 역사 (0) | 2021.10.07 |
[백준][Python] 1727 커플 만들기 (0) | 2021.10.07 |
[백준][Python] 20159 동작 그만. 밑장 빼기냐? (0) | 2021.10.07 |
[백준][Python] 1890 점프 (0) | 2021.10.06 |