728x90
https://programmers.co.kr/learn/courses/30/lessons/43163
dfs와 백트래킹으로 문제를 풀어봤다.
할 수 있는 모든 경우를 탐색하며 가장 최소로 바꾸며 타겟 단어까지 바꾼 횟수를 리턴해주었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import sys
cnt = 0
def solution(begin, target, words):
answer = []
# words 안에 타겟 단어가 없으면 애초에 변환 불가능
if target not in words:
return 0
def dfs(start):
global cnt
# 바꾸지 못 할경우 가장 큰 값 반환
if words.count("A") == len(words):
return sys.maxsize
for w in range(len(words)):
for i in range(len(start)):
# 한 글자를 제외하고 같으면 바꿀 수 있는 단어,
# 단어는 무조건 3 이상이니까 1짜리 단어로 바꿔버리자
if start[:i] + start[i + 1:] == words[w][:i] + words[w][i + 1:] and len(start) == len(words[w]):
if words[w] == target:
answer.append(cnt + 1)
return
a = start
start = words[w]
words[w] = 'A'
cnt += 1
dfs(start)
words[w] = start
start = a
cnt -= 1
dfs(begin)
return min(answer)
|
cs |
728x90
'PS > 프로그래머스' 카테고리의 다른 글
[프로그래머스 LV 3] 정수 삼각형 (파이썬/python) (0) | 2021.06.21 |
---|---|
[프로그래머스 LV 3] 여행경로 (파이썬/python) (0) | 2021.06.21 |
[프로그래머스 LV 3] 베스트앨범 (파이썬/python) (0) | 2021.06.19 |
[프로그래머스 LV 3] 스티커 모으기 (파이썬/python) (0) | 2021.06.17 |
[프로그래머스 LV 3] 야근 지수 (파이썬/python) (0) | 2021.06.17 |