코테준비/알고리즘

[프로그래머스] 모음사전

아놀드금자 2023. 11. 9. 00:41
728x90

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
728x90

'코테준비 > 알고리즘' 카테고리의 다른 글

백준 #2179 비슷한 단어  (1) 2023.11.23
DP - LIS 최장증가부분수열  (1) 2023.11.22
[프로그래머스]해시-전화번호 목록  (1) 2023.11.02
[프로그래머스] 짝지어 제거하기  (0) 2023.11.02
Jadencase  (0) 2023.10.20