문제 링크
문제 풀이
문제 설명
10일간 할인하는 제품을 샀을 때, 원하는 걸 다 살 수 있는 날짜를 모두 찾는 문제이다.
즉,
["banana", "apple", "rice", "pork", "pot"]를 [3, 2, 2, 2, 1]개씩 사고 싶다면,
할인 행사가 아래처럼 개수가 일치할 경우, 해당 날짜는 원하는 걸 살 수 있는 날짜에 해당한다.
["apple", "banana", "rice", "apple", "pork", "banana", "pork", "rice", "pot", "banana"]
문제 접근 방식
각 제품을 Dictionary로 만든 후, 비교할 방식을 생각했다. 또한, 슬라이딩 윈도우 방식을 적용하여 10일이 지난 제품은 제거할 생각이다.
최종 코드
최종 코드는 아래와 같다.
def can_buy(want_dict, dis_dict):
for prod in want_dict.keys():
if want_dict[prod] > dis_dict.get(prod, 0):
return False
return True
def solution(want, number, discount):
answer = 0
want_dict = {}
# 살 목록과 개수 저장
for i in range(len(want)):
want_dict[want[i]] = number[i]
# discount를 순회하며 want_dict와 일치하는지 판단
dis_dict = {}
for i in range(len(discount)):
# dis_dict에서 10일 지난 항목 제거
if i >= 10:
dis_dict[discount[i - 10]] -= 1
# dis_dict에 추가
dis_dict[discount[i]] = dis_dict.get(discount[i], 0) + 1
# want_dict와 비교
if can_buy(want_dict, dis_dict):
answer+=1
return answerdictionary.get(item, 0)을 통해서 dictionary에 없을 경우, 0을 반환하는 방식을 알게 되었다.