공부 서랍장/알고리즘 공부

[프로그래머스] 피로도 python

만땅이 2022. 9. 19. 16:56

문제: https://school.programmers.co.kr/learn/courses/30/lessons/87946

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

최대 값을 찾기 위해 리스트에 넣어야지 뭉충아....ㅠㅠ

def perm(arr,n):
    result = []
    if n > len(arr):
        return result
    if n == 1:
        for i in arr:
            result.append([i])
    elif n > 1:
        for i in range(len(arr)):
            ans = [i for i in arr]
            ans.remove(arr[i])
            for p in perm(ans, n-1):
                result.append([arr[i]]+p)
    return result
        

def solution(k, dungeons):
    # k: 현재 피로도
    # dungeons = ["최소 필요 피로도", "소모 피로도"]
    answer = -1
    p = []
    res = []

    # 모든 경우의 수 도출
    for cnt in range(1, len(dungeons)+1):
        p += (perm(dungeons,cnt))
        

    cnt_tmp = []
    for case in p:
        tmp_k = k
        cnt = 0
        
        # print('현재 확인 중인 경우의 수',case)
        
        for need_k in range(len(case)):
            need_at_least_k = case[need_k][0]
            consume_k = case[need_k][1]
            
            # 입장 조건 맞으면 피로도 소모
            if (tmp_k >= (need_at_least_k)) and (tmp_k-consume_k) >= 0 :
                # print('현재 피로도',tmp_k, '삭감 후 피로도',tmp_k-consume_k)
                tmp_k -= consume_k
                cnt += 1
                
                if len(case) == cnt:
                    print(cnt)
                    cnt_tmp.append(cnt)
                    # print("가능한 경우")
                    cnt = 0
                    break

    return max(cnt_tmp)

 

 

 

 

반응형