프라이D
프라이Develog(❁´◡`❁)
프라이D
전체 방문자
오늘
어제
  • ALL (378)
    • TDD, Cleancode with JavaScr.. (5)
    • 프로젝트 (32)
      • work (3)
      • 직접 만드는 기술 블로그 (2)
      • 데일리 옥션 (19)
      • 모락모락 (8)
    • Computer Science (1)
    • Algorithm & 자료구조 (94)
      • 알고리즘 w.JavaScript (53)
      • 자료구조 (5)
      • (인프런) 자바스크립트 알고리즘 문제풀이 (34)
    • JavaScript (45)
      • JavaScript (41)
      • 모던 자바스크립트 Deep Dive (4)
    • WEB (13)
    • 회고 (12)
    • TIL (109)
    • WIL (7)
    • Stacks (20)
      • React.js (6)
      • Next.js (1)
      • Redux (3)
      • Node.js (2)
      • GIT (2)
      • SAP (1)
    • 15일 메이킹 프로젝트 (15)
    • 이전 기록 (14)
    • ETC. (5)
    • ---------------2021 (6)
      • 내일배움단-웹개발 5주 (2)
      • 정보처리기사 (4)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 국비지원
  • 자바스크립트
  • 투포인터알고리즘
  • vanilaJS
  • Til
  • 알고리즘
  • 스파르타코딩클럽
  • 자바스크립트비트마스크
  • 자바스크립트알고리즘
  • 코딩프로젝트
  • 내일배움단
  • 모던자바스크립트딥다이브
  • MySQL
  • 코드스테이츠
  • 내일배움카드
  • JavaScript
  • nomadcoders
  • 2023 인프콘 후기
  • 비트마스크
  • nomadcoder

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
프라이D

프라이Develog(❁´◡`❁)

Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이

[알고리즘]졸업선물 - sort 정렬, 완전탐색

2022. 2. 6. 13:35

문제

선생님은 올해 졸업하는 반 학생들에게 졸업선물을 주려고 합니다. 학생들에게 인터넷 쇼핑몰에서 각자 원하는 상품을 골라 그 상품의 가격과 배송비를 제출하라고 했습니다. 선생님이 가지고 있는 예산은 한정되어 있습니다.
현재 예산으로 최대 몇 명의 학생에게 선물을 사줄 수 있는지 구하는 프로그램을 작성하세요. 선생님은 상품 하나를 50% 할인해서(반 가격) 살 수 있는 쿠폰을 가지고 있습니다. 배송비는 할인에 포함되지 않습니다.

입력예제

5 28 //학생수 예산
6 6
2 2
4 3
4 5

10 3

풀이

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++) {
          //바깥 for문에서 미리 할인이 될 물품과 그것을 빼고 남은 나머지를 money로 정의한다.
          let money = m - (product[i][0] / 2 + product[i][1]);
          let cnt = 1; //product[i]는 구매된 물건이기 때문에 cnt를 1로 선언
          for (let j = 0; j < n; j++) {
            //안쪽 for문에서 할인 및 구매된 i번째 물품을 제외한 나머지를 남은 money와 비교한다.
            if (j !== i && product[j][0] + product[j][1] > money) break; 
            //j번째 물품가가 money보다 작다면 더 이상 구매할 수 없으므로 break.
            if (j !== i && product[j][0] + product[j][1] <= money) {
              //j번째 물품가가 money와 같거나 그보다 작다면 구매할 수 있으므로
              money -= product[j][0] + product[j][1];
              //j번째 물품가를 제외한 나머지를 다시 money에 재정의하고
              cnt++; //구매했으므로 cnt를 카운팅한다.
            }
            answer = Math.max(answer, cnt);
            //가장 높은 카운트를 비교해 answer에 재할당
          }
        }

        return answer;
      }

      let arr = [
        [6, 6],
        [2, 2],
        [4, 3],
        [4, 5],
        [10, 3],
      ];
      console.log(solution(28, arr));

arr.sort([Compare Function])

arr.sort((a, b) => (a[0] + a[1]) - (b[0] + b[1]));
  • a,b 두개의 element를 파라미터로 받는 경우, 함수의 리턴 값이 0보다 작은 경우는 a가 앞으로, 0보다 클 경우는 b가 앞으로 오도록 정렬한다.
  • 만약 a-b <0 이라면 a가 작으니 앞으로, a-b > 0 이라면 b가 작으니 앞으로 가는 것.
  • 리턴 값 : 원본 배열인 arr이 정렬되고, 리턴 값 또한 원본 배열 arr을 가리키고 있다.
저작자표시 (새창열림)

'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글

[알고리즘] 공통원소 구하기 - 투포인터 알고리즘  (0) 2022.02.08
[알고리즘]k번째 큰 수  (0) 2022.02.06
[알고리즘]멘토링 - 완전탐색  (0) 2022.02.03
[알고리즘]뒤집은 소수(소수 판별하기)  (0) 2022.02.02
[알고리즘]자릿수의 합  (0) 2022.02.01
    'Algorithm & 자료구조/(인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
    • [알고리즘] 공통원소 구하기 - 투포인터 알고리즘
    • [알고리즘]k번째 큰 수
    • [알고리즘]멘토링 - 완전탐색
    • [알고리즘]뒤집은 소수(소수 판별하기)
    프라이D
    프라이D
    틀린내용 정정 및 개선사항은 언제든지 댓글 달아주세요 :D

    티스토리툴바