bong-u/til

프로그래머스 - 이모티콘 할인행사 (L2)

수정일 : 2023-07-23

 1result = []
 2
 3def dfs(size, percent, users, emoticons):
 4    global result
 5
 6    if len(percent) == size:
 7        temp = [0] * len(users)
 8        for i in range(size):
 9            for j in range(len(users)):
10                if percent[i]*100 >= users[j][0]:
11                    temp[j] += emoticons[i]*(1-percent[i])
12        serviceNum = 0
13        income = 0
14        for i in range(len(users)):
15            if temp[i] >= users[i][1]:
16                serviceNum += 1
17            else:
18                income += temp[i]
19        result.append ((serviceNum, income))
20        return
21
22    for i in [0.1, 0.2, 0.3, 0.4]:
23        dfs(size, percent+[i], users, emoticons)
24
25
26def solution(users, emoticons):
27    dfs(len(emoticons), [], users, emoticons)
28    result.sort(reverse=True)
29    return list(result[0])

문제

  • 카카오톡 사용자 n명의 구매 기준을 담은 2차원 정수 배열 users, 이모티콘 m개의 정가를 담은 1차원 정수 배열 emoticons가 주어진다

  • 각 사용자는 일정 비율 이상 할인하는 이모티콘을 구매한다

  • 각 사용자는 구매한 이모티콘 가격의 합이 일정 기준을 넘으면 이모티콘 구매를 모두 취소하고 이모티콘 플러스 서비스에 가입한다

  • 할인율은 10%, 20%, 30%, 40% 중 하나이다

  • 이모티콘 플러스 서비스에 가입자를 늘리는 것을 최우선으로 하며, 이모티콘 판매액을 늘리는 것을 두번째 목표로 했을 때의 이모티콘 플러스 서비스 가입자 수와 이모티콘 매출액을 1차원 정수 배열에 담아 반환하라

  • TC

    • input

      users: [[40, 10000], [25, 10000]], emoticons: [7000, 9000]

    • ouput

      [1, 5400]

해결방법

  • dfs를 이용해서 모든 경우의 수를 완전 탐색하여 해결하였다
  • 할인율의 경우의 수가 4가지 밖에 없어서 가능했던 일이다