https://programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
1. 초기 큐에는 시작 단어와 변환한 횟수가 들어간다.
2. 하나씩 pop하면서 만약 target일 경우 cnt를 반환
3. target이 아니라면 방문하지 않은 words를 돌면서 한글자만 다른 단어를 찾는다.
4. 이것을 큐에 넣고 방문했음을 표시한다.
코드 :
from collections import deque
def solution(begin, target, words):
answer = 0
q = deque()
q.append([begin,0]) # 0은 변화한 횟수
vis = [0 for i in range(len(words))] # 단어의 사용 여부를 나타낸 배열
while q :
word , cnt = q.popleft()
if word == target :
answer = cnt
break
for i in range(len(words)) : # 단어들을 돌면서
tmp_cnt = 0
if vis[i] == 0 : # 이 단어를 안썼다면
for j in range(len(word)) :
if word[j] != words[i][j] :
tmp_cnt+=1
if tmp_cnt == 1 : # 만약 한글자만 다르다면
q.append([words[i],cnt+1])
vis[i] = 1 # 해당 단어 사용!
return answer # 변환할 수 없는 경우 0을 반환
큐에서 하나를 뺀다.
단어들을 돌면서 그 단어를 안썼다면 방금 큐에서 뺀 단어와 한 글자만 다른지 확인한다.
그후 한 글자만 다른게 맞다면 사용했음을 vis에 알리고 큐에 넣는다. (cnt를 하나 증가시킨채로)
변환한 횟수를 큐에 같이 넣는다!!!!!
복습하면서 만든 코드 (target으로 만들지 못할경우 미리 return ) :
from collections import deque
def solution(begin, target, words):
answer = 0
vis = [0 for i in range(len(words))]
q = deque()
q.append([begin,0])
if target not in words : return 0
while q :
cur,cnt = q.popleft()
if cur == target : return cnt
for i in range(len(words)) :
if vis[i] == 0 :
tmp = 0
for j in range(len(words[i])) :
if cur[j] != words[i][j] :
tmp+=1
if tmp == 1 :
q.append([words[i], cnt+1 ])
만약 words에 target이 없으면 만들지 못하기 때문에 미리 return 하도록 만들었다.
근데 여기서 vis를 딱히 안해도 된다.
배운 점 :
1. deque 의 생성시 인수를 주는 것과 append 하는 것과의 차이
d = deque()
d.append([begin,0])
과
d = deque([begin, 0])은 다르다.
덱을 만든 후 append하면 첫번째 줄 출력과 같이 묶여서 저장된다.
그러나
덱을 만들 때 인수로 넣어주면 묶인 것이 아니라 하나 하나의 요소로 저장된다.
참고 블로그 :
프로그래머스 단어 변환(python)
https://programmers.co.kr/learn/courses/30/lessons/43163?language=python3두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 targe
velog.io
복습 :
✅ 20220620
✅ 20220623
✅ 20220624
✅ 20220625
✅ 20220626
✅ 20220628
✅ 20220630
🐾 20220922 (거의 3개월만에 풀었는데 성공!ㅎㅎ)
🐾 20220924
'알고리즘 > 프로그래머스문제풀이' 카테고리의 다른 글
[Python/프로그래머스] 체육복_그리디 (0) | 2022.06.15 |
---|---|
[Python/프로그래머스]여행경로_DFS_(🐶삽질_깊은복사,얕은복사) (0) | 2022.06.15 |
[Python/프로그래머스]네트워크_(DFS,유니온파인드) (0) | 2022.06.15 |
[Python/프로그래머스]타겟넘버_DFS (0) | 2022.06.15 |
[Python/프로그래머스]베스트앨범_해시 (0) | 2022.06.15 |