[프로그래머스] Lv2. 이모티콘 할인행사 - JavaScript

이상돈·2023년 6월 7일
0
post-thumbnail

문제분류 : 코팅테스트 연습

난이도 : Level 2

출처 : 프로그래머스 - 이모티콘 할인행사

문제

제한사항

📌 내가 생각한 풀이

할인률은 [10, 20, 30, 40] 이 네 가지만 존재한다. 완전탐색을 이용하여, 할인률의 경우의 수를 모두 구하고, 구독자수와 총액을 배열에 다 Push한다. 그 이후, 구독자수를 기준으로 내림차순으로 sort한 뒤, 구독자수가 같다면 총액을 내림차순으로 정렬한다음 첫번쨰 원소를 리턴하자.

const getPermutation = (arr, selectNum) =>{
    let result = [];
    if(selectNum === 1) return arr.map((d)=>[d]);
    arr.forEach((data,idx,origin)=>{
        let rest = origin;
        let permu = getPermutation(origin, selectNum-1);
        let attached = permu.map((v)=>[data, ...v]);
        result.push(...attached);
    })
    return result;
    
}

function solution(users, emoticons) {
    var answer = [];
    let discount = [10,20,30,40];
    let useLen = users.length;
    let permu = getPermutation(discount, emoticons.length)
    let result = [];
    
    permu.forEach((data,idx)=>{
        let val = data;
        let sub = 0;
        let totalPrice = 0;
        let price = emoticons.slice();
        users.forEach((d,i)=>{
            let vals = d;
            let eachPrice= 0;
            for(var i =0; i<val.length; i++){
                if(vals[0] <= val[i]){
                    eachPrice += Math.round(price[i] * ((100-val[i])/100));
                }
            }
            if(eachPrice >= vals[1]){
                sub++;
            }else{
                totalPrice += eachPrice
            }
        })
        result.push([sub, totalPrice]);
    })
    result.sort((a,b)=>{
        if(a[0] === b[0]){
            return b[1] > a[1] ? 1 : -1
        }else{
            return b[0] > a[0] ? 1 : -1 
        }
    })
    return result[0]
    
}

📌 느낀점

처음에는 분명 규칙이 있을 거라고 생각했지만, 계속 고민할 수록 규칙이 존재할수없다고 느껴서 완전탐색을 하기로 하였다. 결과적으로 완전탐색으로 풀어야 해결되는 문제였다.

profile
사람들의 더 나은 삶을 위한 개발자

0개의 댓글