알고리즘/프로그래머스
할인 행사
1.5볼트
2023. 5. 31. 01:12
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/131127?language=python3
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아이템과 갯수가 쌍으로 묶이니까 해쉬테이블인 딕셔너리 사용
10개씩 한 구간으로 잡아서 슬라이딩 윈도우를 사용한다
원소가 추가되면 키값에 해당하는 갯수를 하나 증가시키고 빠지는 값은 감소시킨다
매번 실행할때 두개의 딕셔너리가 같을때의 갯수를 세면 답
증가하는건 want -1 일때 1을 증가시키면 want 의 갯수가 되니까 want-1 이랑 같은때 두 원소가 같다고 변수에 저장하고
감소할때는 현재 값이 want 일때 -1 시키면 달라지니까 want 와 현재값이 같을때 달라진다고 변수에 저장
변수의 합이 want의 갯수와 같다면 모든 원소가 같다는 뜻 이떄 전체 횟수가 증가한다
def solution(want, number, discount):
d={}
want=dict(zip(want,number))
s=n=0
s1=len(want)
for i in discount[:10]:
d.setdefault(i,0)
if d[i]==want.get(i,0)-1:
s+=1
d[i]+=1
if s==s1:
n+=1
for i in range(10,len(discount)):
dis=discount[i]
dis1=discount[i-10]
d.setdefault(dis,0)
if d[dis]==want.get(dis,0)-1:
s+=1
d[dis]+=1
if d[dis1]==want.get(dis1,0):
s-=1
d[dis1]-=1
if s==s1:
n+=1
return n