susinlee 님의 블로그
89. 할인 행사 본문
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/131127
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[풀이]
1. 먼저, 원하는 제품과 해당 제품의 수량을 {상품: 갯수} 형태의 딕셔너리(d1)로 생성한다.
2. 그런 다음, 할인 제품 목록에서 첫 10개의 제품을 위와 동일한 형태의딕셔너리(d2)로 구현한 뒤, 두 딕셔너리(d1, d2)를 비교한다. 두 딕셔너리가 같으면 answer 값을 1 증가시킨다.
3. 이후, discount를 순회하면서 슬라이딩 윈도우 기법을 사용해 딕셔너리를 업데이트 한다.
- 왼쪽 끝의 제품은 1 감소시키고, 새로 추가되는 제품은 1 증가 시켜준다.
- 새로 추가되는 제품의 인덱스는 right로 처리한다.
- 이렇게 하면 매일 갱신된 10일간의 할인 제품을 나타내는 딕셔너리(d2)가 만들어진다.
4. right가 discount의 길이(n)에 도달하면, 최종적으로 answer 값을 반환한다.
from collections import defaultdict
def solution(want, number, discount):
d1 = {product: count for product, count in zip(want, number)}
d2 = defaultdict(int)
for i in range(10):
d2[discount[i]] += 1
answer = 0
right = 10
for product in discount:
if d1 == d2:
answer += 1
if right < len(discount):
d2[product] -= 1
d2[discount[right]] += 1
if d2[product] == 0:
del d2[product]
else:
return answer
right += 1
'코드카타 > Python' 카테고리의 다른 글
91. 기능개발 (0) | 2025.01.16 |
---|---|
90. 의상 (0) | 2025.01.15 |
88. 행렬의 곱셈 (0) | 2025.01.13 |
87. n^2 배열 자르기 (0) | 2025.01.12 |
86. H-Index (0) | 2025.01.11 |