졸업선물

지창언·2022년 8월 3일

codingTest

목록 보기
25/29

Index

1.문제
2.코드 및 설명
3.발전시킨 코드


문제

선생님이 가진 사비를 털어 졸업생들에게 선물을 나눠주려합니다.
학생들은 각자 원하는 상품의 가격과 배송비를 제출하였습니다.
선생님이 가진 사비로 가장 많은 수의 학생에게 선물을 하려합니다.
(다만, 선생님은 한가지 상품의 가격만 50% 할인이 되는 쿠폰을 가집니다.)
최대 몇명의 학생에게 선물을 할 수 있는지 출력하시오.

첫 줄에는 선생님의 최대 사비가 입력되고
두번째 줄 부터 각 상품의 가격&배송비가 입력됩니다.

예시)
입력:
28
6 6
2 2
4 3
4 5
10 3
출력:
4


코드 및 설명

<script>
    function solution(m,product){
        let answer = 0;
        let n = product.length;
        product.sort((a,b)=>(a[0]+a[1])-(b[0]+b[1]));
        for(let i=0; i<n; i++){
            let money = m - (product[i][0]/2+product[i][1]);
            let cnt = 1;
            for(let j=0; j<n;j++){
                if(j!==i && (product[j][0]+product[j][1]>money)) break;
                if(j!==i && (product[j][0]+product[j][1]<=money)){
                    money -= product[j][0]+product[j][1];
                    cnt ++;
                }
            }
            answer = Math.max(answer,cnt);
        }
        return answer;
    }
    let arr=[[6, 6], [2, 2], [4, 3], [4, 5], [10, 3]];
    console.log(solution(28, arr));
</script>
  1. 우선 sort를 통해 제품가격+배송비의 오름차순 기준으로 정렬시킨다.
  2. 제품이 할인되었을 모든 경우를 탐색한다.
  3. 반복문과 조건문을 통해, 각 제품의 가격이 현재 소유한 금액보다 큰지를 판별한다.
  4. 크다면 반복문 종료, 작다면 해당 제품 금액만큼을 소유 금액에서 차감하고, cnt 증가 후 계속 수행
  5. 각 반복문이 끝날 때 마다, cnt를 정답변수와 비교하여 더 큰 것을 저장한다.

profile
프론트엔드 개발자가 되고 싶은...

0개의 댓글