1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/43163
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
2. 풀이
그림으로 재현하자면 약간 이런느낌입니다.
최단거리니까 역시 BFS로 구현하는데,
1. 만약 target 단어가 words 안에 없으면 그건 안되는 거라 0 반환
2. word안에서 연결리스트로 그래프 딕셔너리 생성하기
3. 생성 기반으로 bfs돌려서 최단거리 확인하기
BFS 문제를 하도 풀다보니까 이젠 간편하다,,
## code ##
import collections
def solution(begin, target, words):
answer = 0
def bfs(visited):
stack = collections.deque([begin])
cnt = 0
while stack:
c = stack.popleft()
if c == target:
return visited[c]
for w in graph[c]:
if w not in visited.keys():
stack.append(w)
visited[w] = visited[c] + 1
if target not in words:
return 0
words.append(begin)
graph = collections.defaultdict(list)
for word in words:
for word2 in words:
if word == word2: continue
if len([x for i, x in enumerate(word) if x != word2[i]]) == 1:
graph[word].append(word2)
visited = collections.defaultdict(int)
visited[begin] = 0
end = bfs(visited)
if end is None:
end = 0
return end
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] h-index (0) | 2024.04.11 |
---|---|
[프로그래머스] 여행경로 (0) | 2024.04.10 |
[프로그래머스] 네트워크 (1) | 2024.04.10 |
[프로그래머스] 게임 맵 최단거리 (0) | 2024.04.10 |
[프로그래머스] 의상 (0) | 2024.04.09 |