할인행사

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131127

접근 방식

  • 사야할 품목과 수량이 담긴 Map을 만든다.
  • 처음부터 시작해서 할인 행사 길이-10만큼 for문을 돌린다.
  • 물건을 구매하는 함수를 만든다.
  • 물건 구매 완료 후에, 사야 하는 품목을 다 산 경우에만 answer +1

결과

소스 코드

import java.util.*;

class Solution {
    public int solution(String[] want, int[] number, String[] discount) {
        Map<String, Integer> cart = new HashMap<>();
        int answer = 0;

        for(int i=0; i<=discount.length-10; i++){
             for(int j=0; j<want.length; j++){
                cart.put(want[j], number[j]);
            }
            if(buy(discount, i, cart)){
                answer++;
            }
        }
        return answer;
    }

    private boolean buy(String[] discount, int day, Map<String, Integer> cart){
        for(int i=day; i<day+10; i++){
            int count = cart.getOrDefault(discount[i], 0);
            cart.put(discount[i], count-1);
        }
        for(int c:cart.values()){
            if (c>0) return false;
        }
        return true;
    }
}

최적화

최적화 할 수 있는 부분은, 현재 코드에서 카트의 품목 수량을 보존하는 것이다.

현재 코드는 일일히 모든 코드를 수작업으로 수량을 채워놓고 있다.

간단하게 임시 객체를 만들어서 사용할 수 있다.

Map<String, Integer> tmp = new HashMap<>(cart);

알게 된 점