susinlee 님의 블로그

89. 할인 행사 본문

코드카타/Python

89. 할인 행사

susinlee 2025. 1. 14. 10:59

[문제]

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