이모티콘 할인행사 (Lv2)
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
제한 사항
- 1 ≤ users의 길이 = n ≤ 100
- users의 원소는 [비율, 가격]의 형태입니다.
- users[i]는 i+1번 고객의 구매 기준을 의미합니다.
- 비율% 이상의 할인이 있는 이모티콘을 모두 구매한다는 의미입니다.
- 1 ≤ 비율 ≤ 40
- 가격이상의 돈을 이모티콘 구매에 사용한다면, 이모티콘 구매를 모두 취소하고 이모티콘 플러스 서비스에 가입한다는 의미입니다.
- 100 ≤ 가격 ≤ 1,000,000
- 가격은 100의 배수입니다.
- 1 ≤ emoticons의 길이 = m ≤ 7
- emoticons[i]는 i+1번 이모티콘의 정가를 의미합니다.
- 100 ≤ emoticons의 원소 ≤ 1,000,000
- emoticons의 원소는 100의 배수입니다.
풀이
이번문제는 순열을 이용해 문제를 풀었다. emoticons의 최대 길이는 7이고, 10,20,30,40의 할인율만 가능하므로 4^7=16384이고, users의 최대 길이는 100이므로 완전탐색을 해도 충분하다고 판단했다.
먼저, 순열로 각 이모티콘의 할인율을 정한다. 정해진 할인율을 토대로 모든 유저에 대해 완전탐색을 진행했다.
각 이모티콘에 대한 할인율이 유저가 요구하는 할인율보다 높으면 sum에 더했다. 최종적으로 sum이 유저의 최대 금액보다 넘는다면, c를 늘리고, 넘지 않는다면 s를 늘렸다.
마지막으로 c와 customer와, s를 sales와 비교해서 c가 customer보다 많은 경우는 무조건 갱신시켰고, 같은 경우엔 sales와 s를 비교해 큰 값으로 갱신시켰다.
전체 Code
class Solution {
int[] arr;
int customer;
int sales;
public int[] solution(int[][] users, int[] emoticons) {
int[] answer = {};
arr = new int[emoticons.length];
customer=0;
sales=0;
perm(emoticons, 0, users);
return new int[]{customer,sales};
}
public void perm(int[] emoticons, int idx, int[][] users){
if(idx==emoticons.length){
calculate(emoticons, users);
return;
}
for(int i=1; i<=4; i++){
arr[idx]=i;
perm(emoticons, idx+1, users);
}
}
public void calculate(int[] emoticons, int[][] users){
int c=0;
int s=0;
for(int[] i : users){
int percent = i[0];
int price = i[1];
int sum=0;
// 사용자가 구매하려는 비율 이상인 경우에만 sum에 더하기
for(int j=0; j<emoticons.length; j++){
if(arr[j]*10>=percent){
sum+=(emoticons[j]-emoticons[j]*arr[j]/10);
}
}
// 구매액이 price보다 높으면 고객 수 1 증가
if(sum>=price) c++;
// 아니면 판매액 증가
else s+=sum;
}
// 고객 수가 더 높아졌다면 갱신
if(customer<c) {
customer=c;
sales = s;
}
// 같다면 판매액만 갱신
else if(customer==c){
sales = Math.max(sales,s);
}
}
}'알고리즘' 카테고리의 다른 글
| [프로그래머스] 비밀 코드 해독 - Java (0) | 2025.07.22 |
|---|---|
| [프로그래머스] 지게차와 크레인 - Java (0) | 2025.07.21 |
| [프로그래머스] 거리두기 확인하기 - Java (0) | 2025.07.05 |
| [프로그래머스] 행렬 테두리 회전하기 - Java (0) | 2025.07.04 |
| [프로그래머스] 시소 짝꿍 - Java (0) | 2025.07.02 |