할인행사
문제 링크 : 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);