본문 바로가기
프로그래머스/2단계

(Python/LV2)이모티콘 할인 행사

by windy7271 2023. 1. 17.
728x90
반응형

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/150368

 

프로그래머스

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

programmers.co.kr

풀이:

 

from itertools import product
def solution(users, emoticons):

    res = [0, 0]
    for discounts in product((40,30,20,10), repeat = len(emoticons)):
        # print(discounts)
        result = [0, 0] # 이모티콘 판매액
        for user_discount, user_money in users:
            # print(user_discount,user_money)
            sub_pass = 0
            # print(discounts)
            for emoticon, discount in zip(emoticons,discounts):
                if discount >= user_discount:
                    sub_pass += emoticon * (1-discount/100)
            if sub_pass >= user_money:
                result[0] += 1
            else:
                result[1] += sub_pass
        res = max(res, result)
    return res

 

res -  결과를 담을 값

 

for discounts in product((40,30,20,10), repeat = len(emoticons)):

중복순열로 할인율 모든 경우의 수를 담는다 ex (40,40),(40,30) ,,,(10,10) 이런식으로 
repeat 는 반복 개수를 말한다 2개만큼 담는다는 뜻

 

for user_discount, user_money in users:
	sub_pass = 0

패스가입자 0 으로 선언

 

for emoticon, discount in zip(emoticons,discounts):
    if discount >= user_discount:
        sub_pass += emoticon * (1-discount/100)
if sub_pass >= user_money:
    result[0] += 1
else:
    result[1] += sub_pass

중요 부분 

 

유저의 자기만의 할인율 이상을 할인해야 구매한다.

 

할인율을 계산한 가격을 sub_pass에 더한다

sub_pass 가 유저의 자기만의 일정금액보다 크다면 패스를 사고

그렇지 않으면 sub_pass 금액을 더해준다.

 

res = max(res, result)

가장 큰 값만 남겨두면서 비교

 

반응형

댓글