알고리즘/알고리즘 문제 풀이

[프로그래머스 Lv.2] 할인 행사 (Python)

용꿀 2024. 10. 3. 19:30

문제 풀이: https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이

파이썬의 dictionary를 사용해서 쉽게 풀 수 있는 문제이다.

먼저 required라는 딕셔너리에 구매해야 할 상품들을 key로, 구매해야 할 개수를 value로 해서 저장을 한다. 다음으로 첫날부터 마지막날 - 10일까지 시작 날짜로 잡아두고, 다음 10일간의 상품들을 required와 마찬가지로 상품들을 key로 구매할 수 있는 개수를 value로 저장한다.

각 날짜별로 required와 goods가 동일한 경우를 카운트하면 문제를 풀 수 있다.

from collections import defaultdict

def solution(want, number, discount):
    answer = 0
    required = {want[idx]: number[idx] for idx in range(len(want))} # 구매해야 할 제품명을 key, 구매해야 할 제품의 수를 value로 저장
    
    for idx in range(len(discount) - 10 + 1): # 첫날부터 (마지막날 - 10일)까지 반복하면서
        goods = defaultdict(int)
        for day in range(idx, idx + 10): # 10일 동안 할인에 들어가는 제품들을 goods에 저장
            goods[discount[day]] += 1
        
        if goods == required: # 모두 할인 받을 수 있는 경우를
            answer += 1 # 카운트
        
    return answer