Algorithm/Programmers
[알고리즘/프로그래머스/카카오] 이모티콘 할인행사(JS)
개발자 김비숑
2023. 11. 20. 10:13
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/150368?language=javascript
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
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]
}
반응형