이모티콘 할인행사
https://school.programmers.co.kr/learn/courses/30/lessons/150368 (opens in a new tab)
풀이
이모티콘의 개수를 100만개로 착각해서 완전탐색 이외의 풀이 방법을 생각하다보니 아예 못풀었다... 이 풀이도 보자마자 comb 함수의 동작을 직관적으로 파악하지 못했는데 이런 부분에 좀 더 익숙해져야할 것 같다. 혹시 미래의 내가 해석을 못할 때를 대비하자면 예를 들어서 3개의 이모티콘에 대해서 할인 비율을 구하자면 [10, 10, 20], [10, 10, 30], [10, 10, 40], [10, 20, 10], [10, 20, 20] ... 같은 식으로 할인율이 바뀌면서 동작한다.
import java.util.*;
class Solution {
int sign = 0;
int earn = 0;
public int[] solution(int[][] users, int[] emoticons) {
int[] answer = new int[2];
int[] arr = new int[emoticons.length];
comb(arr, 0, users, emoticons);
answer[0] = sign;
answer[1] = earn;
return answer;
}
public void comb(int[] arr, int start, int[][] users, int[] emoticons) {
if (start == arr.length) {
calculate(arr, users, emoticons);
return;
}
for (int i = 10; i <= 40; i += 10) {
arr[start] = i;
comb(arr, start + 1, users, emoticons);
}
}
public void calculate(int[] arr, int[][] users, int[] emoticons) {
int count = 0;
int earn_t = 0;
for (int[] user : users) {
int discount = user[0];
int price = user[1];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] >= discount) {
sum += (emoticons[i] / 100) * (100 - arr[i]);
}
}
if (sum >= price) {
count++;
} else {
earn_t += sum;
}
}
if (count > sign) {
sign = count;
earn = earn_t;
return;
} else if (count == sign) {
if (earn < earn_t) {
earn = earn_t;
}
}
}
}