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

Yuseon Choi·2023년 3월 13일
0

Python 알고리즘

목록 보기
5/5
post-thumbnail

문제 📚

프로그래머스 '모음사전(완전탐색)' 문제 보기

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

제한사항

  • word의 길이는 1 이상 5 이하입니다.
  • word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.



문제 설명 👩‍🏫

두 가지 입력 예시를 통해 문제를 어떻게 풀어야 할지 생각해보자.

#1
입력(word): "AAAAE"
출력(result): 6
사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.

#2
입력(word): "AAAE"
출력(result): 10
"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.



코드 👩‍💻

Solution 1

from itertools import product  # 중복순열

def solution(word):
    lst = list()

    for i in range(1,6):
        for j in product(['A','E','I','O','U'], repeat = i):
            lst.append(''.join(j))
    lst.sort()  # 문자정렬
    return lst.index(word)+1

중복을 허용한 순열을 통해 문제를 풀 수 있다. (product와 repeat)
i가 1일 때: A, E, I, O, U로 만든 순열 ➡️ A, E, I, O, U
i가 2일 때: A, E, I, O, U로 만든 순열 ➡️ AA, AE, AI, AO, AU, EE, EI, ...
i가 3일 때: A, E, I, O, U로 만든 순열 ➡️ AAA, AAE, AAI, AAO, AEA, AEI, AEO, ...
...
join을 통해 문자 리스트들을 하나의 문자열로 바꿔주고 lst에 저장한다.
''.join(['A'],['E'])는 'AE'이다.
sort()함수를 이용하면 문자가 알파벳 순으로 정렬된다.
이후, 해당 word값이 몇 번째인지 찾아 1을 더하고 정답을 출력한다.


Solution 2

from itertools import product

# lambda를 이용한 solution 함수
solution = lambda word: sorted([''.join(j) for i in range(5) for j in product('AEIOU', repeat=i+1)]).index(word)+1

lambda 표현식

  • 함수를 한 줄로 표기할 때 쓰인다.
    lambda 매개변수 : 표현식

sort함수와 sorted 함수 차이

  • sorted 함수는 정렬된 새로운 리스트를 리턴한다.
  • sort 메소드는 아무것도 리턴시켜주지 않는다. (None을 리턴)
profile
AI researcher

0개의 댓글

관련 채용 정보