알고리즘/프로그래머스

[프로그래머스 | Lv2] 이모티콘 할인행사 (Python) - 2023 KAKAO BLIND RECRUITMENT

sssbin 2023. 2. 25. 16:45

 

https://school.programmers.co.kr/learn/courses/30/lessons/150368

 

프로그래머스

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

programmers.co.kr

 

완전탐색을 이용해서 풀었다.

중복순열을 이용해서 할인 가짓수를 먼저 계산해주고,

반복문을 통해 각각 users를 순회하면서

가격 >= 구매액이면 플러스 가입자를 늘리고, 가격 < 구매액이면 판매액을 늘려

조건에 맞는 최댓값을 리턴해주면 된다.

 

# 프로그래머스 150368: 이모티콘 할인행사 (2023 KAKAO BLIND RECRUITMENT)

from itertools import product

def solution(users, emoticons):
    per = [10, 20, 30, 40] # 할인 케이스
    answer = [0, 0]
    
    for i in product(per, repeat=len(emoticons)): # 중복순열
        res = [0, 0]

        for rate, cost in users:
            total = 0 # 구매액 
            for j in range(len(emoticons)):
                if i[j] < rate: # rate보다 할인율이 큰 가격만 계산하도록 한다.
                    continue
                total += ((100 - i[j]) / 100) * emoticons[j]

            # 구매 비용의 합이 일정 가격 이상이 된다면, 이모티콘 플러스 서비스에 가입
            if total >= cost:
                res[0] += 1
            else:
                res[1] += total

        # 조건1 -> 조건2 를 만족하는 최댓값 
        if answer[0] == res[0]:
            answer[1] = max(answer[1], res[1])
        elif answer[0] < res[0]:
            answer = res
    
    return answer