Notion에서 작성한 글이라, 여기에서 더 깔끔하게 보실 수 있습니다! 😮😊
def solution(begin, target, words):
def backtracking(cur, cnt=0):
if cur == target: return cnt
mn = 11
for w in words:
if w not in used and sum(x != y for x, y in zip(cur, w)) == 1:
used.add(w)
nxt = backtracking(w, cnt+1)
mn = min(mn, nxt)
used.discard(w)
return mn
used = {begin}
return 0 if (ret:= backtracking(begin)) == 11 else ret
11
로 초기화한 다음 재귀적으로 갱신한다. 이 최솟값이 갱신되지 않았다는 것은 변환할 수 없다는 것을 의미하므로 0
을 return한다.sum(x != y for x, y in zip(cur, w)) == 1
로 구현했다.def solution(begin, target, words):
if target not in words: return 0
def check(a, b):
cnt = 0
for x, y in zip(a, b):
if x != y:
cnt += 1
if cnt > 1: return False
return cnt
def backtracking(cur, cnt=0, mn=11):
if cur == target: return cnt
if cnt >= mn: return
for w in words:
if w not in used and check(cur, w):
used.add(w)
nxt = backtracking(w, cnt+1, mn)
mn = min(mn, nxt)
used.discard(w)
return mn
used = {begin}
return backtracking(begin)
words
에 target
이 존재하지 않는다는 것은 결국 target
으로 변환할 수 없다는 의미이므로, 으로 존재 여부를 확인한 뒤 존재하지 않는다면 0
을 return한다.cnt
는 0
또는 1
의 값을 가지므로 그대로 반환하면 1
일 때 True
, 0
일 때 False
를 나타내어 의도대로 동작한다.