문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/150368
접근 방법
- 이모티콘 마다 할인율을 dfs로 구함
- 사용자 수만큼 반복
- 이모티콘 수만큼 반복
- 이모티콘 할인율 ≥ 사용자 라면 할인율을 계산해서 지불할 금액에 더함
- 지불할 금액 ≥ 제한금액이면 이모티콘 플러스 가입
- 아니라면 판매액에 지불할 금액 더함
- 이모티콘 수만큼 반복
- 결과값이랑 비교
- 이모티콘 플러스 사용자가 많다면 갱신
- 이모티콘 플러스 사용자가 같다면 판매액이 더 많은 것 갱신
블라인드 코테에선 못 풀었는데 끝나고 반년 뒤에 푸니까 풀렸다...
할인율을 배열로 선언할 필요 없이 for문의 i를 40 30 20 10으로 줄어들게 해도 된다.
이렇게 작성하는게 더 깔끔하다는걸 우리의 스터디 알고신에게 배움
이모티콘 금액 계산하다가 이모티콘 플러스 가입 금액이 넘으면 반복문 탈출해도 된다. 여기서 시간을 단축시킬 수 있다고 한다. 이것 또한 알고신의 첨언...
코드
class Solution {
static int len, resEmo, resSell;
static int[] r = {40, 30, 20, 10};
static int e[], u[][];
public static int[] solution(int[][] users, int[] emoticons) {
e = emoticons;
u = users;
len = emoticons.length;
resEmo = 0;
resSell = 0;
//이모티콘마다 할인율 10, 20, 30, 40 중 선택
dfs(0, emoticons.length, new int[emoticons.length]);
System.out.println(resEmo+" "+resSell);
return new int[]{resEmo, resSell};
}
private static void dfs(int dept, int len, int[] s){
//종료조건
if(dept == len){
calcMember(s);
return;
}
//이모티콘 선택
for (int i = 0; i < 4; i++) {
s[dept] = r[i]; //할인율 선택
dfs(dept+1, len, s);
}
}
private static void calcMember(int[] s) {
int emoPlus = 0;
int totalSell = 0;
//사용자 수만큼 for, 구매할 사람 선택
for(int[] user : u){
int personRate = user[0];
int limitMoney = user[1];
//한 사람이 지불할 가격
int money = 0;
//살 이모티콘 선택
for (int i = 0; i < len; i++) {
if(s[i] >= personRate){ //일정 비율 이상 할인이라면
//살 돈 계산
money += e[i] * (100-s[i]) / 100;
}
}//살 이모티콘 계산 끝
//이모티콘 플러스 가입 여부 확인
if(money >= limitMoney){
//이모티콘 플러스 가입
emoPlus++;
}else{
totalSell += money; //판매 총액 갱신
}
}
//최종 이모티콘 플러스 가입자, 판매총액 비교
if(resEmo < emoPlus){
resEmo = emoPlus;
resSell = totalSell;
}else if(resEmo == emoPlus && resSell < totalSell){
resSell = totalSell;
}
}
}'Problem Solving > Programmers' 카테고리의 다른 글
| [Programmers MySQL] 과일로 만든 아이스크림 고르기 (0) | 2023.05.20 |
|---|---|
| [Programmers MySQL] 3월에 태어난 여성 회원 목록 출력하기 (0) | 2023.05.20 |
| [Programmers Java] 자물쇠와 열쇠 (0) | 2022.10.23 |
| [Programmers Python] 스택/큐 - 기능개발 (0) | 2022.07.08 |
| [Programmers Python] 정렬 - H-Index (0) | 2022.07.03 |