[프로그래머스 Lv.2] 2023 KAKAO BLIND RECRUITMENT - 이모티콘 할인행사

김민지·2023년 10월 22일
0

✨ 문제 ✨


✨ 정답 ✨

// 이모티콘과 할인률 모든 조합 구하기
const getPermutation=(salesArray, emoticonNumber)=>{
    let result=[];
  // 이모티콘 개수가 하나라면 그대로 리턴하면 된다.
    if (emoticonNumber===1){
        return salesArray.map(el=>[el])
    }
    salesArray.forEach((v, index, salesArray)=>{
        const fixed=v;
        const rest=salesArray;
        const permutation=getPermutation(rest, emoticonNumber-1);
        const combineFix=permutation.map(v=>[fixed, ...v])
        result.push(...combineFix)
    })
    return result
}

function solution(users, emoticons) {
    // 할인율 : 10%, 20%, 30%, 40%
    const salesArray=[10, 20, 30, 40];
    // 이모티콘 할인율 조합
    let permutationResults=getPermutation(salesArray, emoticons.length);
    
    // [[이모티콘 가입 여부,판매액]]
    // 배열에 욱여넣고 나중에 최대값 찾을 생각 하지 말고 미리 계산하자
    let max=[0,0]
    for (let i=0;i<permutationResults.length;i++){
        let emoticonPlus=0;
        let salesIncome=0;
        for (let j=0;j<users.length;j++){
            let total=0;
            let [percent, limit]=users[j]
            for (let t=0;t<permutationResults[i].length;t++){
                if (percent<=permutationResults[i][t]){
                    total+=emoticons[t]*(100-permutationResults[i][t])/100
                }
            }
            if (total>=limit){
                emoticonPlus+=1;
            }else{
                salesIncome+=total;
            }
        }
        if (emoticonPlus>max[0]||(emoticonPlus===max[0]&&salesIncome>max[1])){
            max=[emoticonPlus,salesIncome];
        }
    }  
    return max;
}

🧵 참고한 정답지 🧵

https://velog.io/@highero-k/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9D%B4%EB%AA%A8%ED%8B%B0%EC%BD%98-%ED%95%A0%EC%9D%B8%ED%96%89%EC%82%AC-JavaScript-Level-2

💡💡 기억해야 할 점 💡💡

🚑🚑🚑 forEach 메서드 🚑🚑🚑

이게 dfs로도 풀리는구나...

profile
이건 대체 어떻게 만든 거지?

0개의 댓글

관련 채용 정보