[프로그래머스 LV2] 할인 행사

@bbearcookie · April 14, 2023 · 1 min read

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131127

아이디어

마트에서 일별로 할인 판매하는 제품을 나타내는 discount 배열을 0 부터 discount.length - 10 까지 순회하면서 해당 i 날짜에 마트에 등록했을 때 원하는 상품을 정확하게 구매할 수 있는지를 체크한다. 만약 그렇다면 카운트 answer 를 증가한다.

특정 날짜에 등록이 가능한지를 파악하는 로직

  1. Map 자료구조를 생성한다.
  2. i 부터 시작해서 10번째 이후의 날까지 마트에서 판매하는 상품의 갯수를 저장한다.
  3. 정현이가 원하는 상품과 일치하다면 true 를, 하나라도 틀리다면 false 를 반환한다.

소스코드

function canRegisterAt(idx, want, number, discount) {
  const hash = new Map();

  for (let i = idx; i < idx + 10; i++) {
    const item = discount[i];
    hash.set(item, (hash.get(item) || 0) + 1);
  }

  for (let i = 0; i < want.length; i++) {
    if (hash.get(want[i]) !== number[i]) return false;
  }

  return true;
}

function solution(want, number, discount) {
  var answer = 0;

  for (let i = 0; i <= discount.length - 10; i++) {
    if (canRegisterAt(i, want, number, discount)) {
      answer++;
    }
  }

  return answer;
}
@bbearcookie
Frontend Developer