728x90
반응형
1. 문제 설명
2. 풀이과정
각 단어를 변경할 단어와 비교하여 일치하는 문자의 개수를 구해 딕셔너리로 저장한 뒤, 변경할 단어와 1글자만 달라야 해당 단어로 변경할 수 있기 때문에 변경 가능한 단어를 리스트에 따로 저장한다.
저장한 리스트가 비어있다면 변환 불가능한 경우이고 리스트가 비어있지 않다면 목표 단어가 있는지 찾는다.
목표 단어가 있다면 목표로 단어로 변경하고 없다면 아무 단어로 변경한다.
변경할 단어가 목표 단어이면 종료한다.
- 만약 목표 단어가 단어 집합에 없다면 if (target not in words)
- 변환할 수 없는 경우이므로 바로 종료한다. return answer
- 변경할 단어가 목표 단어일 때까지 반복한다. while (begin != target)
- 단어 집합에 있는 단어와 변경할 단어의 일치하는 문자 개수를 저장할 딕셔너리를 생성한다. d = {}
- 단어 집합에 있는 단어를 하나씩 추출해 for i in words
- 추출한 단어를 key로 하여 value를 초기화한다. d[i] = 0
- 변경할 단어의 길이만큼 반복하며 for j in range(len(begin))
- 만약 추출한 단어와 변경할 단어의 각 자리 문자가 일치하면 if (begin[j] == i[j])
- 해당 단어의 value 값을 1 증가시킨다. d[i] += 1
- 단어 집합의 모든 단어와 비교했다면 변경할 단어와 1글자만 다른 단어를 저장할 리스트를 생성한다. li = list()
- 딕셔너리의 key와 value를 튜플로 변환한 결과를 하나씩 추출하여 for i in d.items()
- 만약 일치하는 단어의 개수가 변경할 단어와 1글자 차이라면 if (i[1] == len(begin) - 1)
- 해당 단어를 리스트에 추가한다. li.append(i[0])
- 딕셔너리의 모든 단어와 비교한 뒤, 만약 변경 가능한 단어 리스트에 원소가 없다면 if (len(li) == 0)
- 목표 단어로 변환할 수 없는 경우이므로 0을 반환한다. return 0
- 그게 아니라면 변경 가능한 단어 리스트에 목표 단어가 있는지 확인하고 있다면 if (target in li)
- 변경할 단어를 목표 단어로 변경한다. begin = target
- 반면에 목표 단어가 없다면 else
- 변경 가능한 단어 리스트에서 아무 단어(그냥 제일 앞에 있는 단어)로 변경한다. begin = li[0]
- 한 번 변경한 단어는 다시 변경될 수 없도록 단어 집합에서 제거한다. words.remove(begin)
- 한 번 단어를 변경했으므로 변경한 횟수를 1 증가시킨다. answer += 1
반응형
3. 소스코드
def solution(begin, target, words):
answer = 0
if (target not in words):
return answer
while (begin != target):
d = {}
for i in words:
d[i] = 0
for j in range(len(begin)):
if (begin[j] == i[j]):
d[i] += 1
li = list()
for i in d.items():
if (i[1] == len(begin) - 1):
li.append(i[0])
if (len(li) == 0):
return 0
if (target in li):
begin = target
else:
begin = li[0]
words.remove(begin)
answer += 1
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 스킬트리 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.19 |
---|---|
[프로그래머스] 주식가격 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.18 |
[프로그래머스] 땅따먹기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.17 |
[프로그래머스] 로또의 최고 순위와 최저 순위 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.16 |
[프로그래머스] 주차 요금 계산 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.14 |
[프로그래머스] 오픈채팅방 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.13 |
[프로그래머스] 더 맵게 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.12 |
[프로그래머스] [3차] n진수 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.08.11 |