개발/문제풀이

[카카오 2023 BLIND RECRUITMENT, Python] 이모티콘 할인행사 문제풀이

Junhyung-Choi 2023. 3. 7. 11:55
반응형

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

 

프로그래머스

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

programmers.co.kr

 

from itertools import product

def solution(users, emoticons):
    register_user_count = 0
    max_price = 0

    discounts = product([10,20,30,40],repeat=len(emoticons))
    # 모든 할인율 중복 조합
    for discount in discounts:
        # 각 조합마다 산 유저 수 / 최대 판매 금액
        user_count = 0
        sum_price = 0

        # 각 유저마다
        for user in users:
            # 구매 비용
            paid = 0
            
            # 구매 비용 계산
            # 이모티콘마다
            for i in range(len(emoticons)):
                # 할인율이 유저 기준보다 높거나 같다면
                if(discount[i] >= user[0]):
                    # 구매 비용에 추가
                    rate = (100 - discount[i])
                    price100 = emoticons[i] * rate
                    # print(price100 // 100)
                    paid += price100 // 100
            
            # 본인이 낸 돈이 기준보다 높다면
            if(paid >= user[1]):
                # 이모티콘 플러스 등록
                user_count += 1
            # 아니라면
            else:
                # 총 판매금액에 추가
                sum_price += paid


        if(register_user_count < user_count):
            register_user_count = user_count
            max_price = sum_price
        elif (register_user_count == user_count):
            if(max_price < sum_price):
                max_price = sum_price
    
    return [register_user_count,max_price]

 

빠르게 풀 수 있는 방법은

파이썬 내장 라이브러리인 

from itertools import product

를 통해 중복순열을 구현하면 편하다.

 

어느 할인율이 가장 높은 가격을 가질지 확인할 수 없으며,

유저 수와 할인율의 제한이 100명, 4개씩 7개의 이모티콘의 종류만이 존재하므로

브루트포스 알고리즘을 통해서 충분히 구현 가능하다고 판단되므로, 모든 할인율의 순열을 뽑아서

각 할인율마다 사용자가

- 이모티콘 플러스를 구매할지

- 이모티콘을 개별 구매할지

판단하고, 이에 맞는 숫자를 갱신해나가면

마지막에 최대 사용자 수와 가격을 얻을 수 있다.

728x90