이모티콘 할인행사

2024. 5. 28. 14:36알고리즘/카카오

2023 KAKAO BLIND RECRUITMENT

https://school.programmers.co.kr/learn/courses/30/lessons/150368

 

프로그래머스

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

programmers.co.kr

  • 난이도 : Level 2, 정답률 38%
  • 소요 시간 : 25분
  • 실행 결과 : 성공

이모티콘이 7개이고 적용할 수 있는 할인율이 4개이기 때문에 중복순열을 사용했을 때 최악의 경우 4의 7승이므로 완전탐색으로 구현할 수 있겠다고 판단했다. 따라서 중복순열을 이용해 적용할 수 있는 모든 할인율의 경우의 수를 구해 할인율을 적용한 할인 금액을 구한다. 그리고 users를 순회하며 유저마다 기준 할인율 이상으로 할인이 적용된 이모티콘을 구매한다. 그 다음 구매 금액과 기준 금액을 비교해 서비스에 가입할지 아니면 이모티콘을 구매할 지 데이터를 저장한 다음 ret 배열에 넣어준다. 문제의 요구사항에 따라 첫번째 목표를 먼저 달성하는 것이 중요하므로 ret를 정렬해주면 된다.

function solution(users, emoticons) {
    const ret = [];
    const rate = [10, 20, 30, 40];
    const tmp = [];
    // 중복순열을 이용해 적용할 수 있는 할인율의 모든 경우의 수를 구한다.
    function permutation(level){
        if(level === emoticons.length){
            const answer = [0, 0];
            // 할인율을 적용한 할인 금액을 구한다.
            const discounts = [...emoticons].map((price, idx)=>{
                const discountPrice = price - price * (tmp[idx] / 100);
                return discountPrice;
            });
            // 유저마다 기준 할인율 이상으로 적용된 이모티콘을 구매한다.
            users.forEach(([userRate, userMoney], idx)=>{
                let purchase = 0;
                tmp.forEach((discountRate, idx)=>{
                    if(discountRate >= userRate) purchase += discounts[idx];
                });
                // 기준 금액보다 구매 금액이 같거나 초과하면 서비스에 가입, 그러지 않으면 이모티콘 구매
                if(userMoney <= purchase) answer[0] += 1;
                else answer[1] += purchase;
            });
            ret.push(answer);
            return;
        }
        else{
            for(let i = 0; i<rate.length; i++){
                tmp.push(rate[i]);
                permutation(level + 1);
                tmp.pop();
            }
        }
    }
    
    permutation(0);
    ret.sort(([subScriber1, sales1], [subScriber2, sales2])=>{
        if(subScriber1 === subScriber2) return sales2 - sales1;
        return subScriber2 - subScriber1;
    });
    return ret[0];
}

'알고리즘 > 카카오' 카테고리의 다른 글

주차 요금 계산  (0) 2024.05.29
양궁 대회  (0) 2024.05.29
두 큐 합 같게 만들기  (0) 2024.05.28
개인정보 수집 유효기간  (0) 2024.05.27
가장 많이 받은 선물  (0) 2024.05.27