꾸물꾸물 졔의 개발공부
[프로그래머스] 이모티콘 할인행사 - JAVA (2023 KAKAO BLIND RECRUITMENT) 본문
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
이모티콘 최대갯수가 7개이므로 모든 할인율의 경우에 수에 대해 완전탐색으로 구현하였다.
각 이모티콘의 할인율에 대한 가격을 int[][] sales 배열에 저장해두었는데, 할인금액을 구하는 과정에서
(s는 할인율 {10,20,30,40} )
sales[i][j] = (int)((double)emo * (1.0 - (s/100.0)));
을 했더니 85점을 받았다.
sales[i][j]= (emo * (100-s)) / 100;
다음과 같이 바꾸었더니 100점이 나왔는데 잘 모르겠다,, (emoticons 원소는 100배수라고 했는데 왜 ..?)
아무튼 다른 부분은 (조금 복잡한) 구현으로 해결 할 수 있다!
class Solution {
private int[] sale = {10,20,30,40};
private int[][] sales; // 이모티콘의 할인율 별 가격
private int[] select;
int[] answer = {0,0};
public int[] solution(int[][] users, int[] emoticons) {
sales = new int[emoticons.length][4]; // 10,20,30,40%
for(int i=0; i<emoticons.length; i++){
int emo = emoticons[i]; //이모티콘의 가격
for(int j=0,s=10; j<4; j++, s+=10){
sales[i][j]= (emo * (100-s)) / 100;
//sales[i][j] = (int)((double)emo * (1.0 - (s/100.0)));
}
}
select= new int[emoticons.length];
findAll(0, emoticons.length,users);
return answer;
}
//이모티콘별 할인율 가능한 모든 경우 찾기
private void findAll(int cnt, int len, int[][] users){
if(cnt==len){
findBest(select,users);
return;
}
for(int i=0; i<4; i++){
select[cnt] = sale[i];
findAll(cnt+1,len,users);
}
}
//select: 각 이모티콘 별 할인율을 담고 있는 배열
private void findBest(int[] select, int[][]users){
int[] users_sum = new int[users.length]; //각 사용자들의 구매 비용
int plus =0;
int all_amount =0; //총 가입금액
for(int i=0; i<users.length; i++){
int discount = users[i][0];// 해당 비율이상의 이모티콘 모두 구매
int amount = users[i][1]; //해당 금액 넘으면 이모티콘 무제한으로 변경
for(int j=0; j<select.length; j++){
int sale_sel = select[j]; //j번째 이모티콘의 할인율
if(sale_sel >= discount) {
users_sum[i] += sales[j][(sale_sel/10)-1] ; //몇번째 이모티콘의 얼만큼 할인율의 가격 더하기
}
}
if(users_sum[i] >= amount) plus++; //이모티콘 플러스 가입
else all_amount += users_sum[i];
if(answer[0] < plus) {
answer[0] = plus;
answer[1] = all_amount;
}
else if(answer[0] == plus) {
answer[1] = Math.max(answer[1], all_amount);
}
}
}
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 쿼드압축 후 개수 세기 - JAVA (월간 코드 챌린지 시즌1) (0) | 2023.09.07 |
---|---|
[프로그래머스] 이진 변환 반복하기 - JAVA (월간 코드 챌린지 시즌 1 (0) | 2023.09.06 |
[프로그래머스] 개인정보 수집 유효기간 - JAVA (2023 KAKAO BLIND RECRUITMENT) (0) | 2023.09.01 |
[프로그래머스] 등산코스 정하기 - JAVA (2022 KAKAO TECH INTERNSHIP) (0) | 2023.08.22 |
[프로그래머스] 다단계 칫솔 판매 - JAVA (2021 Dev-Matching: 웹 백엔드 개발자(상반기)) (0) | 2023.06.27 |