프로그래머스 이모티콘 할인행사

피나코·2023년 1월 18일
0

알고리즘

목록 보기
33/46
post-thumbnail

PRGS_이모티콘 할인행사 바로가기

문제 설명

이모티콘을 사다가 일정 금액 이상이되면 사람들은 이모티콘을 구독 서비스를 신청한다고 한다. 그리고 특정 할인율 이상의 이모티콘은 무조건 구입한다고 한다.

(일정 금액과, 특정 할인율은 사람마다 다르다.)

각 이모티콘에다가 할인율(40%, 30%, 20%, 10%) 을 적용해야하는데, 구독 서비스를 가장 많이 신청했을 때의 인원과 그때의 이모티콘 판매액을 구하여라

구독서비스 인원이 없거나 전과 같다면 판매액이 가장 많은 경우를 구하면 된다.

접근 방식

할인율이 4가지 밖에 없다 이모티콘의 개수는 7개이다.

4^7 경우의 수가 생기게 되는데 이는 완탐을 돌려도 충분하다!

할인율이 적용 될 수 있는 모든 경우의 수에서, 구독 서비스 신청 수, 판매 금액을 구하고 비교하면된다.

코드

import java.util.*;

class Solution {
    static int maxNumOfSubscriber;
    static int maxSalePrice;
    static int[] discountRateArray= {40, 30, 20, 10};
    
    public int[] solution(int[][] users, int[] emoticons) {
        int[] answer = new int[2];
        
        recur(0, emoticons.length, new int[emoticons.length], users, emoticons);
        
        answer[0] = maxNumOfSubscriber;
        answer[1] = maxSalePrice;
        
        return answer;
    }
    
    static void recur(int current, int numOfEmoticons, int[] input, int[][] users, int[] emoticons){
        if(current == numOfEmoticons){
            int numOfSubscriber = 0;
            int salePrice = 0;
            
            for(int[] user : users){
                int userDiscountRate = user[0];
                int userLimit = user[1];
                
                int sum = 0;
                
                for(int i = 0; i < input.length; i++){
                    if(input[i] >= userDiscountRate) {
                        sum += emoticons[i] * (100 - input[i]) / 100;
                    }
                }
                
                if(sum >= userLimit) numOfSubscriber++;
                else salePrice += sum;
            }
            
            if(maxNumOfSubscriber < numOfSubscriber) {
                maxNumOfSubscriber = numOfSubscriber;
                maxSalePrice = salePrice;
            }else if(maxNumOfSubscriber == numOfSubscriber){
                maxSalePrice = Math.max(maxSalePrice, salePrice);
            }
            
            return;
        }
        
        for(int i = 0; i < 4; i++){
            input[current] = discountRateArray[i];
            recur(current + 1, numOfEmoticons, input, users, emoticons);
        }
    }
    
}

Disscussion

카카오 블라인드 당시 풀었던 문제이긴 한데... 카카오는 레벨투도 어렵다..

profile
_thisispinako_

0개의 댓글