def inputArr(i) :
if i in arr : arr[i] += 1
else : arr[i] = 1
def solution(want, number, discount):
global arr
arr = {}
want_dict = {}
answer = 0
for i in discount[:10] :
inputArr(i)
for i in range(len(want)) :
want_dict[want[i]] = number[i]
end = 10
count = 0
while end <= len(discount) :
check = 0
for i in want_dict :
if i in arr and want_dict[i] <= arr[i] :
check += 1
if check == len(want_dict) : count += 1
if end == len(discount) : break
start_pro, end_pro = discount[end-10], discount[end]
arr[start_pro] -= 1
inputArr(end_pro)
end += 1
return count
문제정리
마트는 일정한 금액을 지불하면 10일 동안 회원 자격을 부여합니다. 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 합니다.
자신이 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치하는 날짜에 회원가입을 할려고한다.
이때 일치하는 날짜의 횟수를 return
풀이과정
10일의 제품들을 저장하는 dict를 유지한 후
11일이 됬을 경우 1일 할인상품을 dict에서 빼고 11일 할인 상품을 넣은 후 자신이 원하는 제품과 비교해보는 과정을 반복하여 날짜를 계산했다.
코드가 굉장히 지저분해져서 고민했는데 일단 풀이 하였다.
테스트케이스 12번만 맞아서 질문하기를 대충 찾아봤는데
일치하는 날짜들의 횟수를 더해서 리턴해야하는데 문제를 잘못읽어서 처음나온날짜를 리턴해서 틀렸던 것이였다. 이후 로직은 그대로 가져가고 리턴을 바꿈으로 해결하였다.
풀이 후
다른 사람 코드를 보니 dict==dict가 가능하다는 것을 알았다.
list==list가 된다는 것도 정말 놀랐다.
그 이외에는 counter을 라이브러리를 사용하여 풀이하였는데
매 날짜마다 counter로 10일의 dict를 만들어서 dict==dict로 풀이하였다.
시간복잡도가 크게올라 이렇게 풀이하지않았는데 아마 n이 작아서 가능했던거같다.
Counter도 연습해나와겠다.