Coding Problem

[프로그래머스] 카카오 - 이모티콘 할인행사

Yepchani 2025. 1. 31. 16:00
반응형

문제

2023 카카오 블라인드 채용 - 이모티콘 할인행사

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

 

 

풀이

설명

행사 목적을 최대한으로 달성했을 때의 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 구하는 문제입니다.

 

서비스 가입자 수를 최대한 늘리고, 가입자 수가 같다면 판매액을 최대로 늘려야 합니다.

가능한 모든 조합을 구해 계산하면 됩니다.

 

예시 코드

function solution(users, emoticons) {
  const discountRates = [10, 20, 30, 40];
  const discounts = [];
  let maxSubscribers = 0;
  let maxSales = 0;

  dfs(0);

  return [maxSubscribers, Math.floor(maxSales)];

  function dfs(depth) {
    if (depth === emoticons.length) {
      let subscribers = 0;
      let totalSales = 0;

      users.forEach(([minDiscount, minPrice]) => {
        let totalPurchase = 0;

        emoticons.forEach((price, i) => {
          if (discounts[i] >= minDiscount)
            totalPurchase += price * (1 - discounts[i] / 100);
        });

        if (totalPurchase >= minPrice) subscribers++;
        else totalSales += totalPurchase;
      });

      if (
        subscribers > maxSubscribers ||
        (subscribers === maxSubscribers && totalSales > maxSales)
      ) {
        maxSubscribers = subscribers;
        maxSales = totalSales;
      }

      return;
    }

    for (const rate of discountRates) {
      discounts.push(rate);
      dfs(depth + 1);
      discounts.pop();
    }
  }
}