본문 바로가기

카테고리 없음

파이썬)이모티콘 할인행사

 

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

 

프로그래머스

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

programmers.co.kr

 

from itertools import product


def solution(users, emoticons):
    answer = [0,0]
    sales = [10, 20, 30, 40]    # 이모티콘의 할인율


    for case in product(sales, repeat=len(emoticons)):
        plus = 0
        money = 0
        for user in users:
            total = 0
            for idx, sale in enumerate(case):
                if case[idx] >= user[0]:
                    total += emoticons[idx] * (100 - sale) // 100 
                    
            if user[1] <= total:
                plus += 1
            else:
                money += total
        if answer[0] < plus:
            answer[0] = plus
            answer[1] = money
        elif answer[0] == plus:
            if answer[1] < money:
                answer[1] = money

    return answer

우선 알아야 할 점은 세일은 10,20,30,40 중 하나로 결정되고

그 4개의 경우의 수가 각기 다른 이모티콘에 적용된다는 점이다. 예를들어 임티1에 10퍼센트, 임티2에 40퍼센트 이런 식이다.

그런 경우의 수를 모두 product로 만들었다.

그 다음은 users 리스트를 돌며 user의 할인율이 더 작으면 할인율을 계산하는 등의 작업을 그대로 코드로 옮겼다.

이 문제는 내가 실패한 문제인데, 우선 문제를 대충 읽어 세일이 10,20 등으로 정해져 있다는 점을 인지하지 못했다.

또한 임티마다 다른 또는 같은 할인율이 적용된다는 점을 인지하지 못했다.

때문에 나는 1퍼센트부터 100퍼센트까지의 할인율을 가진다 생각했고 이분탐색으로 진행했었다.