๋ฌธ์ ์ค๋ช
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
- ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค.
- words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด begin์ด "hit", target๊ฐ "cog", words๊ฐ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์ ๊ฐ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต์ ๋ช ๋จ๊ณ์ ๊ณผ์ ์ ๊ฑฐ์ณ begin์ target์ผ๋ก ๋ณํํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋ ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
- words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
- begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
- ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
์ ๋ต
def solution(begin, target, words):
answer = 0
queue = [begin]
while True:
temp_queue = []
for word_1 in queue:
if word_1 == target:
return answer
for i in range(len(words)-1, -1, -1):
word_2 = words[i]
# word_1๊ณผ word_2์ ์ฒ ์ ์ค ํ๊ธ์๋ง ๊ฐ์ง ์๋ค๋ฉด
if sum([x!=y for x, y in zip(word_1, word_2)]) == 1:
temp_queue.append(words.pop(i))
if not temp_queue:
return 0
queue = temp_queue
answer += 1
if word_1 == target:
return answer
queue์ ๋ค์ด์๋ word_1๊ณผ target์ด ๊ฐ์ผ๋ฉด ํ์์ด ๋๋๋ฏ๋ก
๋ช ๋จ๊ณ ๊ณผ์ ์ ๊ฑฐ์ณค๋์ง ์ ์ฅํ answer๋ฅผ returnํ๋ค.
for i in range(len(words)-1, -1, -1):
word_2 = words[i]
# word_1๊ณผ word_2์ ์ฒ ์ ์ค ํ๊ธ์๋ง ๊ฐ์ง ์๋ค๋ฉด
if sum([x!=y for x, y in zip(word_1, word_2)]) == 1:
temp_queue.append(words.pop(i))
๋จ์ด์ ์งํฉ words์ ๋ง์ง๋ง ๋จ์ด๋ถํฐ ์ดํด๋ณด๋ฉด์ word_2์ ์ ์ฅํ๋ค.
๊ฐ์ ์์น์ word_2์ queue์์ ๊บผ๋ธ word_1์ ๋จ์ด ์ฒ ์๊ฐ ๋ค๋ฅด๋ค๋ฉด 1์ ๋ฐํํ๋๋กํ์ฌ
๋จ์ด์ ์ฒ์๋ถํฐ ๋๊น์ง ์ดํด๋ณธ ํ ๋ค ๋ํ์ ๋ 1์ด๋ผ๋ฉด ์ฒ ์๊ฐ ํ๋๋ง ๋ค๋ฆ์ ์๋ฏธํ๋ค.
์ด๋ temp_queue์ ํด๋น ๋จ์ด๋ฅผ ์ถ๊ฐํ๋๋ฐ
words.pop์ ์ด์ฉํ์ฌ ๋ค์๋ฒ์ ๊ทธ ๋จ์ด๋ฅผ ๋ค์ ์ดํด๋ณด์ง ์๋๋ก word์์ ์์ ์ค๋ค.
if not temp_queue:
return 0
queue = temp_queue
answer += 1
๋ง์ฝ temp_queue๊ฐ ๋น์๋ค๋ฉด ์ฒ ์ ํ๋๋ง ๋ค๋ฅธ ๋จ์ด๊ฐ word์ ์๋ค๋ ๋ป์ด๋ฏ๋ก
๋ณํํ ์ ์๋ค๋ ๋ป์ด๊ธฐ ๋๋ฌธ์ 0์ return ํ๋ค.
๊ทธ๋ ์ง ์๋ค๋ฉด queue๋ฅผ temp_queue๋ก ๋ฐ๊พธ๊ณ ํ ๋จ๊ณ๋ฅผ ๊ฑฐ์ณค์ผ๋ answer์ 1์ ๋ํด์ค๋ค.
์ด์ ๋ค์ queue์ ์๋ ๋จ์ด๋ฅผ ์ด์ฉํ์ฌ ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.