https://programmers.co.kr/learn/courses/30/lessons/43163
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | def solution(begin, target, words): answer = 0 visit = [0]*len(words)#방문한 곳 표시 queue = [] #방문한 단어를 넣음 #target이 words배열 안에 없으면 return 0 if target not in words: return answer #두 문자열에서 다른 문자의 차이를 return def get_diff(A, B): cnt=0 for a, b in zip(A, B): if a!=b: cnt+=1 return cnt def bfs(begin, target): nonlocal queue, visit, answer queue.append(begin) #먼저 begin을 넣음 #큐가 빌때까지 돎. while queue: x = queue.pop(0) #queue의 맨 앞의 것을 pop len_x = len(x)#단어의 길이를 계산 if get_diff(x, target) ==1: #pop한 단어와 target의 단어 차이가 1이면 answer+=1 #answer에 +1을해주고 break #while문 종료 for i in range(len(visit)): #0부터 끝까지 돌면서 탐색 if visit[i] == 0 and get_diff(x, words[i]) == 1: #방문하지 않았고, 차이가 1이면 queue.append(words[i]) #큐에 넣음 visit[i]=1 # 방문 표시 answer+=1 #변환 과정이므로 +1 break bfs(begin, target) return answer | cs |
효율적이지 않은 코드일 수도 있지만, 오랜만에 레퍼런스 안보고 혼자서 푼 문제다 :)
로직 짜는 게 수월해질 수 있을때까지 열심히 공부하기!!
(혹시 코드에 오류가 있다면 댓글로 알려주세요.)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 오픈채팅방 - C++, (unordered_map, sstream) (0) | 2021.11.11 |
---|---|
[C++] 베스트 앨범 (해시 문제) (0) | 2021.11.06 |
[프로그래머스/파이썬] 여행경로 (0) | 2021.11.02 |
[C++]숫자 문자열과 영단어 (0) | 2021.09.04 |
[C++] 신규 아이디 (0) | 2021.08.29 |