https://school.programmers.co.kr/learn/courses/30/lessons/84512
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
하... 개킹받게 엉뚱한걸로 헤맸다
[내가생각한방법]
product로 중복순열 만들기 -> 정렬하기 -> 여기서 word 찾아서 index 출력
근데 문제는!!!!!!!! 중복순열 리스트 만들고 정렬하는데서 발생함
모든 길이를 한 리스트 안에 넣고 정렬하니
(a,a) 다음에 (a,a,a)가 오는것이 아닌 (a,e) (a,i) 가 온다!!!!! -> 리스트 원소보다 리스트 길이를 먼저 고려해버리기 때문
그래서 이 정렬방법 때문에 한참 고민했다 .sort(key = lamda x : (len(x), x) 요런식으로 다중조건도 고려해보고...
결국 다른 풀이를 참고한 결과!!!!
[정답]
product로 중복순열 만들기 -> list를 string으로 합치기 -> 정렬하기 -> 여기서 word 찾아서 index 출력
이 방법으로 하면 list가 아니라 string이기 때문에 그냥 sort만 사용해도 원하는 순서대로(사전순) 정렬이 된다!!!!!!!!!!!!!!
from itertools import product
def solution(word):
words = []
mo = ['A', 'E', 'I', 'O', 'U']
arr = []
for i in range(1, 6):
arr.append(list(product(mo, repeat=i)))
for i in arr:
for j in i:
words.append(''.join(j))
words.sort()
return words.index(word) + 1
# 더 짧은버전
from itertools import product
def solution(word):
words = []
mo = ['A', 'E', 'I', 'O', 'U']
for i in range(1, 6):
for j in product(mo, repeat=i):
words.append(''.join(list(j)))
words.sort()
return words.index(word) + 1
'코테준비 > 알고리즘' 카테고리의 다른 글
백준 #2179 비슷한 단어 (1) | 2023.11.23 |
---|---|
DP - LIS 최장증가부분수열 (1) | 2023.11.22 |
[프로그래머스]해시-전화번호 목록 (1) | 2023.11.02 |
[프로그래머스] 짝지어 제거하기 (0) | 2023.11.02 |
Jadencase (0) | 2023.10.20 |