Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 이모티콘 할인행사 - 150368 본문

프로그래머스

[level 2] 이모티콘 할인행사 - 150368

csct3434 2024. 2. 29. 03:31

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

class Solution {

    private int subscribe = 0;
    private int purchase = 0;

    private static int[] rate = {10, 20, 30, 40};

    public int[] solution(int[][] users, int[] emoticons) {
        func(users, emoticons, new int[emoticons.length], 0);
        return new int[]{subscribe, purchase};
    }

    private void func(int[][] users, int[] emoticons, int[] discount, int count) {
        if (count == emoticons.length) {
            solve(users, emoticons, discount);
            return;
        }

        for (int i = 0; i < 4; i++) {
            discount[count] = rate[i];
            func(users, emoticons, discount, count + 1);
        }
    }

    private void solve(int[][] users, int[] emoticons, int[] discount) {
        int[] purchaseAmount = new int[users.length];

        for (int i = 0; i < users.length; i++) {
            for (int j = 0; j < emoticons.length; j++) {
                if (users[i][0] <= discount[j]) {
                    purchaseAmount[i] += (emoticons[j] / 100) * (100 - discount[j]);
                }
            }
        }

        int sub = 0, total = 0;
        for (int i = 0; i < users.length; i++) {
            if (purchaseAmount[i] >= users[i][1]) {
                sub++;
            } else {
                total += purchaseAmount[i];
            }
        }

        if (sub > subscribe) {
            subscribe = sub;
            purchase = total;
        }
        
        if (sub == subscribe) {
            purchase = Math.max(purchase, total);
        }
    }
}