[프로그래머스] 150368번 : 이모티콘 할인행사

ghltjd369·2023년 10월 11일
0

📌 출처

150368번 : 이모티콘 할인행사

📝 문제 설명


⚠ 제한 사항

⌨ 입출력 예

usersemoticonsresult
[[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]

🖨 입출력 예 설명

💻 내 코드

class Solution {
    static int[] discount = {10, 20, 30, 40};
    static int maxPlusService = 0;
    static int maxCost = 0;
    
    public int[] solution(int[][] users, int[] emoticons) {
        
        findResult(0, users, emoticons, new int[emoticons.length]);
        
        int[] answer = {maxPlusService, maxCost};
        return answer;
    }
    
    private void findResult(int index, int[][] users, int[] emoticons, int[] discounts) {
        if(index == emoticons.length) {
            int plusService = 0;
            int cost = 0;
            
            for(int[] user : users) {
                int percent = user[0];
                int price = user[1];
                int sum = 0;
                
                for(int i = 0; i < emoticons.length; i++) {
                    if(discounts[i] >= percent) {
                        sum += emoticons[i] / 100 * (100 - discounts[i]);
                    }
                }
                
                if(sum >= price) {
                    plusService++;
                } else {
                    cost += sum;
                }
            }
            
            if(plusService > maxPlusService) {
                maxPlusService = plusService;
                maxCost = cost;
            } else if(plusService == maxPlusService) {
                maxCost = Math.max(cost, maxCost);
            }
            
            return;
        }
        
        for(int i = 0; i < 4; i++) {	//재귀함수로 할인율 저장
            discounts[index] = discount[i];
            findResult(index + 1, users, emoticons, discounts);
        }
    }
}

✏ 설명

문제가 복잡해서 머리가 띵해졌다..이딴게 레벨2..?
근데 알고 보니까 꽤 쉬운 문제였다...
우선 제한 사항을 보면 숫자들이 굉장히 작다.
그리고 할인은 10, 20, 30, 40퍼센트로 한정되어 있다.
그럼 나올 수 있는 경우의 수는 4^7...

완전 탐색을 이용하여 해결하였다.

완전탐색으로 할인 가능한 모든 경우의 수를 탐색하였다.
각각의 경우에 대해 모든 유저들이 계산을 하고 최대값을 구했다.

숫자가 작은 경우 완전 탐색을 항상 생각하자.

0개의 댓글