gurwhddl
코알못 공부블로그
gurwhddl
전체 방문자
오늘
어제
  • 분류 전체보기
    • CSS
    • JS
    • node.JS
    • REACT
    • 코딩테스트 연습

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gurwhddl

코알못 공부블로그

코딩테스트 연습

프로그래머스 - 이모티콘 할인행사(2023 KAKAO BLIND RECRUITMENT)

2023. 4. 18. 21:08

문제
[https://school.programmers.co.kr/learn/courses/30/lessons/150368]


코드

function solution(users, emoticons) {
  
  const result = [0, 0];
  const salePercent = [10, 20, 30, 40];
  function dfs(n) {//할인 퍼센트 구해주는 함수
    if (n.length === emoticons.length) {
      purchase(n);
      return;
    }
    for (let i = 0; i < salePercent.length; i++) {
      dfs([...n, salePercent[i]]);
    }
  }
  dfs([]);
  function purchase(n) {//할인 퍼센트를 받아서 비교해주는 함수
    let enroll = 0;
    let total = 0;
    const salePrice = emoticons.map((e, i) => {
      return e * (100 - n[i]) * 0.01;
    });
    for (let user of users) {
      let money = 0;
      for (let i = 0; i < n.length; i++) {
        if (user[0] <= n[i]) {
          //이모티콘 구입
          money += salePrice[i];
        }
      }
      //총 금액이 본인꺼보다 많으면 - 이모티콘 안사고 플러스 가입
      if (money >= user[1]) {
        enroll += 1;
      } else {
        total += money;
      }
    }
    if (result[0] < enroll) {
      result[0] = enroll;
      result[1] = total;
    } else if (result[0] === enroll && result[1] < total) {
      result[0] = enroll;
      result[1] = total;
    }
  }
  return result;
}

풀이

    • 문제를 요약해보면 emoticons 배열의 각 이모티콘 가격에 10% ~ 40%까지의 할인률을 적용했을 때 이 할인률이 유저의 기준 할인률(0번째 index)보다 크다면 이모티콘을 구입하고 그렇지 않다면 구입하지 않음

 

    • 각 유저당 emoticons 배열을 돌면서 구입할 이모티콘이 있다면 값을 더해주고 , 최종 값이 유저의 기준 값(첫번째 index)보다 크다면, 이모티콘을 전부 구매하지 않고 이모티콘 플러스를 구독함 / 작을시에는 구독하지 않고 개별 이모티콘만 구매

 

    • emoticons 길이가 최대 7밖에 안되기 때문에 10~40까지 어떤 할인률을 가질지 백트래킹으로 구해줄 수 있음

 

    • 예를 들면 이모티콘이 두개라면 (10,10) , (10,20) , (10,30) ...

 

    • 할인률을 구했다면 purchase 함수에서 할인률을 인자로 받아 for문을 이용해서 각 유저별로 기준 할인률과 비교해서 구입할지 안할지를 선택

 

  • for문이 끝나면 해당 할인률에는 몇명이 구독하고 얼마를 구매할지를 알 수 있으니, 기존의 result값과 비교해서 넣어주면 됨(구독자 수가 우선)

'코딩테스트 연습' 카테고리의 다른 글

백준 2217 - 로프  (1) 2023.04.20
프로그래머스 - 과제 진행하기  (0) 2023.04.19
프로그래머스 - 혼자서 하는 틱택토  (0) 2023.04.18
프로그래머스 - 두 원 사이의 정수 쌍  (0) 2023.04.17
백준 1874 - 스택 수열  (0) 2023.04.17
    '코딩테스트 연습' 카테고리의 다른 글
    • 백준 2217 - 로프
    • 프로그래머스 - 과제 진행하기
    • 프로그래머스 - 혼자서 하는 틱택토
    • 프로그래머스 - 두 원 사이의 정수 쌍
    gurwhddl
    gurwhddl

    티스토리툴바