[프로그래머스] 코딩테스트 연습 > 2023 KAKAO BLIND RECRUITMENT > 이모티콘 할인행사
카카오톡에서는 이모티콘을 무제한으로 사용할 수 있는 이모티콘 플러스 서비스 가입자 수를 늘리려고 합니다.
이를 위해 카카오톡에서는 이모티콘 할인 행사를 하는데, 목표는 다음과 같습니다.
이모티콘 할인 행사는 다음과 같은 방식으로 진행됩니다.
카카오톡 사용자들은 다음과 같은 기준을 따라 이모티콘을 사거나, 이모티콘 플러스 서비스에 가입합니다.
(생략)
카카오톡 사용자 n명의 구매 기준을 담은 2차원 정수 배열 users, 이모티콘 m개의 정가를 담은 1차원 정수 배열 emoticons가 주어집니다. 이때, 행사 목적을 최대한으로 달성했을 때의 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 1차원 정수 배열에 담아 return 하도록 solution 함수를 완성해주세요.
users | emoticons | result |
---|---|---|
[[40, 10000], [25, 10000]] | [7000, 9000] | [1, 5400] |
[[40, 2900], [23, 10000], [11, 5200], [5, 5900], [40, 3100], [27, 9200], [32, 6900]] | [1300, 1500, 1600, 4900] | [4, 13860] |
배열 saleArr에
중복순열을 사용하여 실제 이모티콘 별 할인율을 할당한다.
모두 할당되었다면
해당 할인율에 대한 이모티콘 플러스 가입자 수, 이모티콘 매출액을 계산한다.
class Solution {
static int[] sales = { 10, 20, 30, 40 }; // 이모티콘 할인율
static int[] saleArr = null; // 실제 이모티콘 할인율을 저장
public int[] solution(int[][] users, int[] emoticons) {
int[] answer = { 0, 0 };
// 실제 이모티콘 할인율을 저장한다.
// 이모티콘 개수만큼 길이를 할당해준다.
saleArr = new int[emoticons.length];
// 중복순열
permutation(0, users, emoticons, answer);
return answer;
}
private static void permutation(int cnt, int[][] users, int[] emoticons, int[] answer) {
// 이모티콘 별 할인율이 모두 할당된 경우
if (cnt == emoticons.length) {
// 해당 할인율에 대한
// 전체 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액
int totplus = 0, totcost = 0;
// 해당 할인율에 대한
// 전체 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액을 구해보자
for (int i = 0; i < users.length; i++) {
// s: 구매가능한 할인율, c: 이모티콘 플러스로 전환하는 기준 금액, nowcost: 현재까지 쓴 금액
int s = users[i][0], c = users[i][1], nowcost = 0;
for (int j = 0; j < emoticons.length; j++) {
if (s <= saleArr[j]) {
int cost = emoticons[j] - (emoticons[j] * saleArr[j] / 100);
nowcost += cost;
if (nowcost >= c) {
nowcost = 0;
totplus++;
break;
}
}
}
totcost += nowcost;
}
// 해당 할인율에 대한
// 전체 이모티콘 플러스 서비스 가입 수와 이모티콘 매출액이
// 더 나은 경우 업데이트
if (answer[0] < totplus) {
answer[0] = totplus;
answer[1] = totcost;
} else if (answer[0] == totplus) {
if (answer[1] < totcost) {
answer[1] = totcost;
}
}
return;
}
// 이모티콘 별 할인율을 할당
for (int i = 0; i < sales.length; i++) {
saleArr[cnt] = sales[i];
permutation(cnt + 1, users, emoticons, answer);
}
}
}