-
프로그래머스 고득점 kit(유형정리) - 모음사전Algorithm/Brute Force 2023. 2. 2. 09:53728x90
코딩테스트 연습 - 모음사전 | 프로그래머스 스쿨 (programmers.co.kr)
문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
입출력 예wordresult"AAAAE" 6 "AAAE" 10 "I" 1563 "EIO" 1189 입출력 예 #1
사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.
입출력 예 #2
"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.
입출력 예 #3
"I"는 1563번째 단어입니다.
입출력 예 #4
"EIO"는 1189번째 단어입니다.
이 문제를 보면 앞서 우리가 풀었던 "약수 문제"나 "피로도 문제"가 떠올라야 한다. 해당 문제들은 모두 순열을 사용하여 문제를 해결할 수 있었다. 이 문제가 해당 문제들과 다른 점은 단 하나 순열이기는 하지만 문자가 중복으로 나열되어도 된다는 점이다. 그렇다면 이제 중복순열은 어떻게 풀이할 수 있는지를 알아보아야 한다.
구글 검색을 통해 itertools 안에 있는 product를 import 시키면 된다는 것을 알게 되었다.
product메서드는 product("문자", repeat = 길이)의 형태로 적어주면 문자들을 조합하여 해당 길이만큼의 중복 순열을 나열해 준다.
※ 알고리즘
1. product 메서드를 사용하여 for문 속에서 'AEIOU'로 조합할 수 있는 중복 순열을 뽑고 ''.join() 메서드를 사용하여 단어를 붙인다.
2. 길이 5안에서 product 메서드를 사용해야하므로 이중 for문을 사용한다.
3. 해당 list를 sorting 해주고 문자의 index에 1을 더한 값을 return 시킨다.
from itertools import product def solution(word): answer = 0 result = [''.join(j) for i in range(0,5) for j in product('AEIOU', repeat=i+1)] result.sort() answer = result.index(word) + 1 return answer
이렇게 해결이 가능하다.
728x90'Algorithm > Brute Force' 카테고리의 다른 글
완전탐색(유형정리) - 백준 16439 (0) 2023.03.12 완전탐색(유형정리) - 백준 1969 (0) 2023.03.11 프로그래머스 고득점 kit(유형정리) - 카펫 (0) 2023.02.01 프로그래머스 고득점 kit(유형정리) - 피로도 (1) 2023.02.01 프로그래머스 고득점 kit(유형정리) - 소수찾기 (0) 2023.01.31