[Programmers] 단어 λ³€ν™˜

Updated:

단어 λ³€ν™˜

단어 λ³€ν™˜ 을 ν΄λ¦­ν•˜λ©΄ λ°”λ‘œ μ΄λ™ν•œλ‹€.

ν˜„μž¬ κΈ°μ€€ 단어와 ν•œ κΈ€μžλ§Œ λ‹€λ₯Έ 단어듀을 μ „λΆ€ 큐에 λ„£κ³  λΉΌλ©° 찾고자 ν•˜λŠ” 단어가 λ‚˜μ˜¬ λ•Œ κΉŒμ§€ λ°˜λ³΅ν•˜λ©΄ λœλ‹€.

λ§Œλ“€ 수 μ—†λŠ” κ²½μš°λŠ” words 에 단어가 μ—†λŠ” κ²½μš°μ΄λ―€λ‘œ μ²˜μŒμ— 체크해 μ€€λ‹€.

ν•œ κΈ€μžλ§Œ λ‹€λ₯Έ 단어λ₯Ό μ°ΎκΈ° μœ„ν•΄ μ²˜μŒμ—” 차집합을 μ‚¬μš©ν–ˆμœΌλ‚˜ 생각이 μ§§μ•˜λ‹€.

같은 문자둜 이루어진 단어라면 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

λ”°λΌμ„œ zip 을 톡해 λ™μ‹œμ— μˆœν™˜ν•˜λ©° 비ꡐλ₯Ό ν•΄μ£Όμ—ˆλ‹€.


from collections import deque


def is_another_one(pivot, check):
	diff_cnt = 0

	# 단어λ₯Ό 비ꡐ해 λ‹€λ₯Έ λΆ€λΆ„ 갯수 검색
	for a, b in zip(pivot, check):
		if a != b:
			diff_cnt += 1

	if diff_cnt != 1:
		return False
	else:
		return True


def solution(begin, target, words):
	# λ³€ν™˜ν•  수 μ—†λŠ” 경우
	if target not in words:
		return 0

	queue = deque([])
	# 큐 μ΄ˆκΈ°ν™”
	for word in words:
		if is_another_one(begin, word):
			queue.append([word, 1])

	# BFS
	while queue:
		word, work = queue.popleft()
		if word == target:
			return work
		for check in words:
			if is_another_one(word, check):
				queue.append([check, work + 1])



Categories:

Updated:

Leave a comment