완전탐색 프로그래머스lv2 (피로도, 모음사전)

김하진·2022년 8월 30일
0

요즘 프로그래머스 lv2를 계속해서 풀고 있다. 저번주에 본 코테의 처첨한 결과이후 알고리즘 공부를 더 열심히 해야 겠다는 생각이 많이 든다.

피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.

이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다. 유저의 현재 피로도 k와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons 가 매개변수로 주어질 때, 유저가 탐험할수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.

from itertools import permutations

def solution(k, dungeons):
    answer = 0
    
    for permut in permutations(dungeons, len(dungeons)):
        hp = k
        count = 0
        for pm in permut:
            if hp >= pm[0]:
                hp -= pm[1]
                count += 1
        if count > answer:
            answer = count
    
    return answer

순열을 이용해서 풀었다. 완전탐색 알고리즘에는 itertools 를 이용하는 방법 좋아 보인다.
처음에는 그냥 for문을 돌려서 분기문으로 제어를 해보려 했으나 카운트2가 정답이 아닌 카운트가 3이 되는 조건이 되는 값을 리턴해야 하는데, 방법이 떠오르지 않아 고민하다가 순열로 모든 조합을 구해서 답을 리턴 하였다.

모음사전

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

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

from itertools import product

def solution(word):
    words = []
    for i in range(1, 6):
        for c in product(['A', 'E', 'I', 'O', 'U'], repeat=i):
            words.append(''.join(list(c)))

    words.sort()
    return words.index(word) + 1

모음사전 또한 product 를 이용해서 인덱스를 이용해서 답을 찾았다.

profile
진킴

0개의 댓글