Skip to content

Latest commit

ย 

History

History
112 lines (80 loc) ยท 4.5 KB

File metadata and controls

112 lines (80 loc) ยท 4.5 KB

๋‹จ์–ด ๋ณ€ํ™˜

์ถœ์ฒ˜: https://programmers.co.kr/learn/courses/30/lessons/43163

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๊ฐœ์˜ ๋‹จ์–ด begin, target๊ณผ ๋‹จ์–ด์˜ ์ง‘ํ•ฉ words๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ ์ด์šฉํ•˜์—ฌ begin์—์„œ target์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์งง์€ ๋ณ€ํ™˜ ๊ณผ์ •์„ ์ฐพ์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

1. ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ์•ŒํŒŒ๋ฒณ๋งŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2. 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 ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

Untitled

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์˜ˆ์ œ #1๋ฌธ์ œ์— ๋‚˜์˜จ ์˜ˆ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ์ œ #2target์ธ "cog"๋Š” words ์•ˆ์— ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ใ…Ž.. ์ด ๋ฌธ์ œ ๊ฒ๋‚˜ ์ด์ƒํ•˜๋‹ค.

์ผ๋‹จ ๊ณต๊ฐœ๋œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ž‘ ์ฑ„์ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ธฐ์ค€์ด ๋‹ค๋ฅด๋‹ค. ์ด๊ฒƒ ๋•Œ๋ฌธ์—๋„ ๊ฒ๋‚˜ ์‚ฝ์งˆํ–ˆ๋‹ค.

๊ณต๊ฐœ๋œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‹จ์–ด๊ฐ€ ๋ณ€ํ™˜ํ•œ ํšŸ์ˆ˜, ์ฑ„์  ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋Š” ๋‹จ์–ด์˜ ์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ด๊ฑฐ ์ž˜๋ชป๋œ์ง€ ์—„์ฒญ ์˜ค๋ž˜๋œ ๊ฑฐ ๊ฐ™์€๋ฐ ํ”Œ๋จธ์Šค๋Š” ๊ณ ์น˜๋ ค๋Š” ์ƒ๊ฐ์ด ์ „ํ˜€ ์—†๋‚˜๋ณด๋‹ค ใ…‹ใ…‹ใ…‹ใ…‹ใ…Ž

์—ฌํŠผ..

๋‚˜์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€,

๋จผ์ € begin, words์— ์žˆ๋Š” ๋‹จ์–ด์— ๋Œ€ํ•œ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ , value์— ๊ทธ ๋‹จ์–ด๊ฐ€ ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋‹จ์–ด์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  bfs๋กœ ๋Œ๋ฉด์„œ, queue๋ฅผ ์—…๋ฐ์ดํŠธ ํ• ๋•Œ๋งˆ๋‹ค queue๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋ณ€ํ™˜ํ•ด์„œ count์— ์ด์ค‘๋ฆฌ์ŠคํŠธ๋กœ ๋„ฃ๋Š”๋‹ค. (depth๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•จ)

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋‹ค ๋Œ๋ฉด count๋ฅผ ๋Œ๋ฉด์„œ target์ด ์žˆ๋Š”์ง€ ์ฐพ์•„๋ณด๊ณ , ์žˆ์œผ๋ฉด, ๊ทธ depth์—์„œ +1 ํ•ด์„œ ๋ฆฌํ„ดํ•œ๋‹ค.

์—†์œผ๋ฉด 0

from collections import deque

def checkWord(begin, target):
    count = 0
    for i in range(len(begin)):
        if begin[i] != target[i]:
            count += 1
        if count > 1:
            return False
    return True

def bfs(graph, root, target):
    visited = []
    count = []
    queue = deque([root])
    
    while queue:
        n = queue.popleft()
        if n not in visited:
            visited.append(n)
            # if n is None, Runtime error
            if n in graph:
                queue.extend(list(set(graph[n]) - set(visited)))
            # count depth
            count.append(list(queue))
    for i in range(len(count)):
        if target in count[i]:
            return i + 1
    return 0

def solution(begin, target, words):
    answer = 0
    if target not in words:
        return 0
    graph = {}
    graph[begin] = []
    #init graph
    for i in words:
        if checkWord(begin, i):
            graph[begin].append(i)
        for j in words:
            if i != j and checkWord(i, j):
                if i not in graph.keys():
                    graph[i] = []
                if j not in graph.keys():
                    graph[j] = []
                graph[i].append(j)
    answer = bfs(graph, begin, target)
    return answer

queue extendํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๊ณ„์† runtime error๊ฐ€ ๋‚˜์„œ ์—„์ฒญ ํ—ค๋งธ๋‹ค. graph[n]๋งŒ ์ ‘๊ทผํ•˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”๊ฒจ.. ์˜ค๋Š˜ ๋„ˆ๋ฌด๋„ˆ๋ฌด ํ”ผ๊ณคํ•ด์„œ ๋ฐ”๋กœ ๋ชป์ฐพ์€๊ฑฐ๊ฐ™๋‹ค;; ์ถœ๊ทผํ•˜๊ณ  ๋ฐฅ๋จน๊ณ  ํšŒ์˜ํ•˜๊ณ  ์•Œ๊ณ  ํ•˜๋‚˜ ํ’€๊ณ  ์ž๋ ค๊ณ  ํ‘ผ๊ฑด๋ฐ ๋ฌธ์ œ๋„ ๋ง›์ด ๊ฐ”๊ณ  ๋‚˜๋„ ๋ง›์ด ๊ฐ€๋ฒ„๋ ธ๋‹ค;

์ด๊ฒŒ ์™œ ์—๋Ÿฌ ๋‚ฌ๋‚˜๋ฉด, ์ด words๋“ค์ด ์„œ๋กœ ๋Œ๊ณ  ๋Œ์•„์„œ ๋‚˜์ค‘์— ์ฐจ์ง‘ํ•ฉํ•˜๊ณ ๋‚˜๋ฉด ๋นˆ list๊ฐ€ extend๋˜์–ด์„œ n ์ž์ฒด๊ฐ€ ๋นˆ queue๊ฐ€ ๋˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด pop ํ•ด๋ดค์ž None์ด๊ณ  ๊ทธ None์„ key๋กœ ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ๊นŒ ์•ˆ๋˜์ง€.. ์•„....

์ด๊ฑฐ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 4๋ฒˆ ๊ณ„์—์—์—์† ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค...

์˜ค๋ž˜ ์‚ฝ์งˆํ–ˆ์ง€๋งŒ ์š”์ฆ˜ ์•Œ๊ณ ์— ์žฌ๋ฏธ๋ถ™์—ฌ์„œ ํ”ผ๊ณคํ•ด๋„ ์žฌ๋ฐŒ๋‹ค. ์˜์–ด ๊ณต๋ถ€๋„ ์žฌ๋ฏธ ์ข€ ๋ถ™์œผ๋ฉด ์ข‹๊ฒ ๋‹ค.