반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150368?language=javascript
풀이
function solution(users, emoticons) {
/**
1. 이모티콘마다 다른 할인율을 적용했을 때, 유저 이모티콘 구매 비용과 서비스 가입 여부를 확인
2. 전체 구매 비용, 서비스 가입자 수를 확인
3. 서비스 가입자 수가 더 많거나 || (가입자 수는 같고 && 이모티콘 구매비용 더 많으면) 답 교체
*/
const discountRate = [10, 20, 30, 40]
let maxSubCnt = Number.MIN_SAFE_INTEGER
let maxSum = Number.MIN_SAFE_INTEGER
function DFS(L, userSum) {
if (L >= emoticons.length) {
let sum = userSum.reduce((a, b) => a + b, 0)
let sub = 0
for (let i=0;i<users.length;i++) {
// 이모티콘 플러스 서비스 가입자 확인
if (userSum[i] >= users[i][1]) {
sub += 1
sum -= userSum[i]
}
}
if (maxSubCnt < sub) {
maxSubCnt = sub
maxSum = sum
} else if (maxSubCnt === sub && maxSum < sum) {
maxSum = sum
}
}
else {
// 4가지 확인율 적용 체크
for (let i=0;i<4;i++) {
const currentDiscountRate = discountRate[i]
const nextSum = [...userSum]
for (let j=0;j<users.length;j++) {
const [rate, price] = users[j]
// 할인율이 높은 경우 구매
if (rate <= currentDiscountRate) {
nextSum[j] += emoticons[L] * (1 - currentDiscountRate * 0.01)
}
}
DFS(L+1, nextSum)
}
}
}
DFS(0, Array(users.length).fill(0))
return [maxSubCnt, maxSum]
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[알고리즘/프로그래머스/카카오] 양궁대회(JS) (0) | 2023.11.22 |
---|---|
[알고리즘/프로그래머스/카카오] 택배 배달과 수거하기 (2) | 2023.11.21 |
[알고리즘/프로그래머스/카카오] 개인정보 수집 유효기간(JS) (2) | 2023.11.16 |
[알고리즘/프로그래머스/고득점Kit] 완전탐색(JS) (0) | 2023.09.20 |
[알고리즘/프로그래머스/고득점Kit] 스택/큐(JS)(같은 숫자는 싫어, 기능개발, 올바른 괄호, 프로세스, 다리를 지나는 트럭, 주식가격) (0) | 2023.09.15 |