Post

[2023 KAKAO BLIND RECRUITMENT] 이모티콘 할인행사

[2023 KAKAO BLIND RECRUITMENT] 이모티콘 할인행사

🙋‍♂️ 들어가며

이번 문제는 최악의 연산횟수가 다음과 같겠다

$4^7$

만약 이모티콘의 길이라 2라면 아래처럼 총 64번을 탐색하겠군.

Desktop View

그리고 1순위가 멤버쉽,

2순위는 이모티콘 구매이므로

멤버쉽이 같을때는 구매값이 클때 갱신이 필요하겠군


✅ 코드

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class Solution {
    static int m;
    static int[] discount_rate = {10, 20, 30, 40};
    static int[] answer;
    static int max_membership;
    static int max_price_sum;
    
    public int[] solution(int[][] users, int[] emoticons) {
        answer = new int[2];
        
        m = emoticons.length;
        
        max_membership = 0;
        max_price_sum = 0;
        
        int[] selected_discount_rate = new int[m];
        back_tracking(0, selected_discount_rate, users, emoticons);
        
        answer[0] = max_membership;
        answer[1] = max_price_sum;
        return answer;
    }
    
    
    
    static void back_tracking(int idx, int[] selected_discount_rate, int[][] users, int[] emoticons) {
        // 끝지점 도달시
        if (idx == m) {
            caclulate(users, selected_discount_rate, emoticons);
            return;
        }
        
        // 아직 아니라면
        for (int i = 0; i < 4; i++) {
            selected_discount_rate[idx] = discount_rate[i];
            back_tracking(idx+1, selected_discount_rate, users, emoticons);
        }
        
    }
    
    
    
    
    static void caclulate(int[][] users, int[] selected_discount_rate, int[] emoticons) {
        int cur_membership = 0;
        int cur_price_sum = 0;
        
        for (int[] u : users) {
            int limit_discount = u[0];
            int limit_price = u[1];
            int temp_price_sum = 0;
            
            for (int i = 0; i < m; i++) {
                int cur_discount = selected_discount_rate[i];
                
                // 만약 (내가 허용하는 할인율 > 현재 할인율) -> skip
                if (limit_discount > cur_discount) continue;
                
                // 내 할인율이 더 크면
                int rate = 100 - cur_discount;
                int temp_price = (emoticons[i] * rate) / 100;
                temp_price_sum += temp_price;
            }
            
            // 만약 (임시합 >= limit) -> 멤버쉽 추가
            if (temp_price_sum >= limit_price) {
                cur_membership++;
            }
            // limit 이 더 크면
            else if (temp_price_sum < limit_price) {
                cur_price_sum += temp_price_sum;
            }
        }
        
        // 최종비교
        // 1순위 멤버쉽, 2순위 구매값
        if (max_membership < cur_membership) {
            max_membership = cur_membership;
            max_price_sum = cur_price_sum;
        }
        else if (max_membership == cur_membership) {
            if (max_price_sum < cur_price_sum) {
                max_price_sum = cur_price_sum;
            }
        }
        
    }
    
    
    
}
This post is licensed under CC BY 4.0 by the author.

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?

Trending Tags

도움이 필요하면
나를 눌러 구리🐻
챗봇
너굴
bot
어서와 구리 ʕ ·ᴥ·ʔ
무엇이 필요하셔 구리?