728x90
1. 문제
2. 풀이과정
해당 문제는 단어가 1자리부터 최대 5자리까지만 존재하므로 모든 경우를 구한 뒤에 찾는 것으로 해결하였다.
모든 경우를 찾을 때는 중복순열을 활용하여 찾아주었다.
- 중복순열을 구해주는 product 함수를 사용하기 위해 product 모듈을 불러온다. from itertools import product
- 중복순열을 저장해 줄 리스트를 생성한다. result = list()
- 최소 1자리 단어부터 최대 5자리 단어까지 존재하므로 각 자리 개수만큼 반복하며 for i in range(1, 6)
- 모음 리스트에서 중복을 허용하여 해당 자리 단어를 리스트로 생성한다. li = list(product(["A", "E", "I", "O", "U"], repeat=i))
- 중복순열을 구한 뒤 해당 순열을 하나씩 불러오며 for j in li
- 각 순열을 하나의 단어로 만들어 결과에 한 단어로 저장한다. result.append(''.join(k for k in j))
- 전부 구한 중복순열의 결과를 사전순으로 정렬한다. result.sort()
- 정렬한 중복순열 리스트에서 해당 단어의 인덱스를 찾아 1을 더해준 값이 정답이다. 인덱스 값으로 찾았기 때문에 번호를 붙일 때는 1을 더해줘야 한다. answer = result.index(word) + 1
3. 소스코드
from itertools import product
def solution(word):
answer = 0
result = list()
for i in range(1, 6):
li = list(product(["A", "E", "I", "O", "U"], repeat=i))
for j in li:
result.append(''.join(k for k in j))
result.sort()
answer = result.index(word) + 1
return answer
728x90
'CodingTest > [프로그래머스 LV.2]' 카테고리의 다른 글
프로그래머스 Lv2. 올바른 괄호 (0) | 2024.05.30 |
---|---|
프로그래머스 Lv2. 게임 맵 최단거리 [Python] - 깊이/너비 우선 탐색(DFS/BFS) (0) | 2024.04.03 |
프로그래머스 Lv.2 - 소수 찾기[Python] : 완전탐색 (0) | 2023.03.04 |
프로그래머스 Lv.2 - 다리를 지나는 트럭[Python] : 스택/큐 (0) | 2023.02.28 |
프로그래머스 Lv.2 - 가장 큰 수[Python] : 정렬 (0) | 2023.02.28 |