본문 바로가기

PS/프로그래머스

[프로그래머스 LV 2] 이모티콘 할인행사 (파이썬/python)

728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

모든 경우의 수를 탐색하는 완전탐색 문제였습니다.

 

이모티콘당 모든 할인 상황을 중복 순열로 구한 후
모든 상황에 대해 조건을 판단하는 문제였습니다.

 

중복순열을 구할때 파이썬에서 제공하는 product 를 사용했습니다.

 

 

# 1. 이모티콘 플러스 가입자 최우선
# 2. 이모티콘 판매액 차우선
from itertools import product

sale_list = [10, 20, 30, 40]


def solution(users, emoticons):
    answer = [0, 0]
    sale_situation_list = []

    # 모든 세일 상황에 대한 중복 순열을 저장
    for i in product(sale_list, repeat=len(emoticons)):
        sale_situation_list.append(list(i))

    # 모든 할인 상황 완전 탐색
    for situation in sale_situation_list:
        plus_subscriber = 0
        emoticon_total_amount = 0

        for user in users:
            sale_value, max_price = user
            emoticon_amount = 0

            for i, sale_percent in enumerate(situation):
                if sale_value <= sale_percent:
                    emoticon_amount += (emoticons[i] * (100 - sale_percent) / 100)

            if emoticon_amount >= max_price:
                plus_subscriber += 1
            else:
                emoticon_total_amount += emoticon_amount

        if answer[0] < plus_subscriber:
            answer[0] = plus_subscriber
            answer[1] = int(emoticon_total_amount)

        elif answer[0] == plus_subscriber and answer[1] < emoticon_total_amount:
            answer[1] = int(emoticon_total_amount)

    return answer
728x90