요즘 코딩 문제 안풀다가 푸니까 감을 잃어버린거 같아서 다시 풀게되었다.
카카오같이 긴 문제들은 어떻게 로직을 짜느나가 가장 중요한데
요즘 사소한 실수가 너무 많아서 다른 사람 코드를 보면서 어떻게 짜는것이 효율적인지
배우면서 나먼저 로직을 종이에 짜고 확인하는 과정을 걸쳤다.
이미 아는 사실이지만 코딩에서 가장 중요한건
15분정도 확인하는데 중복 순열 문제였다.
const combination= function(check,final,go=[]){
if(go.length>=final){
answer.push(go.slice());
return;
}
for(var i=0; i<4; i++){
combination(check,final,[...go,discount_percent[i] ]);
}
}
이전에는 중복을 고려해서 1을 체크해줬지만, 여기서는 체크안해줫다. 저번 카카오문제에서 체크로 풀시 너무복잡해서 다른 사람들이 푸는 로직을 몇개 봣는데 차라리 이게 난거 같다.아니면 0X 이런식으로 풀던가..
어찌됫든 문제 푸는 방식
할인율이 높은 아이템만 구매해야된다. < 이게 안써있는데 테스트케이스에서 그런거 같아서 추가햇다 ( 카카오는 자꾸 설명을 쫌 빼고 알려줌 ... 테스트케이스에 발견하는게 중요하다 )
각각의 상품이 할인률을 통해서 각각의 인간이 구매가능할때 그 금액과 가입수를 구분하는 문제였다.
if 문 && 주의
처음에는 가입수가 클때 && 금액이 가장 클때 이런식으로 했더니
우선순위를 생각해주지 않아서 오류가 발생했다. 이렇게 우선순위가 있으면 if 문을 나눠서 문제를 풀면 좋다.
function solution(users, emoticons) {
var answer = [];
var discount_percent=[10,20,30,40];
var check_Arr= Array.from({length:4},()=>0);
var every_inroll_max=0;
var every_introo_sum=0;
//조합으로 몇가지 경우가 나올수 있나 하나 만들기
const combination= function(check,final,go=[]){
if(go.length>=final){
answer.push(go.slice());
return;
}
for(var i=0; i<4; i++){
combination(check,final,[...go,discount_percent[i] ]);
}
}
combination(check_Arr,emoticons.length);
for(var i=0; i<answer.length; i++){
var current_discount=answer[i];
var total_plus_peopl=0;
var total_plus_sum=0;
for(var ig=0; ig<users.length; ig++){
//현재사람이 가능한가?
var current_people= users[ig];
var count_people=0;// 지금가격이
for(var thing=0; thing<emoticons.length; thing++){
if(current_people[0]<=current_discount[thing]){
count_people+= (emoticons[thing]* ((100-current_discount[thing]) /100))
}
}
if(count_people<current_people[1]){
total_plus_sum+=count_people
}
else{
total_plus_peopl+=1;
}
}
//현재 가입률과 총 금액을 볼수 있다. 여기서 메인은 가입률이기 때문에 ...
//여기만 고치면 됨요
if(every_inroll_max<total_plus_peopl){
every_inroll_max=total_plus_peopl;
every_introo_sum=total_plus_sum;
}
else if(every_inroll_max==total_plus_peopl &&every_introo_sum<total_plus_sum )
{
every_introo_sum=total_plus_sum
}
}
return [every_inroll_max,every_introo_sum];
}
요즘따라 코딩 실력이 안느는게.. 걍 내가 실력이 없어서 그런가 싶어서 걍..포기하고 싶다는 생각이 든다.. 그냥 기사 하나 있는걸로 아무데나 들어갈까.. ㅋㅋㅋㅋ 하....
코딩 테스트가 기본인데...ㅠ