240713 TIL #450 CT_할인행사(p / 슬라이딩 윈도우)

김춘복·2024년 7월 13일
0

TIL : Today I Learned

목록 보기
450/571

Today I Learned

오늘도 파이썬 코테연습!


CT_할인행사

https://school.programmers.co.kr/learn/courses/30/lessons/131127

문제

마트 회원이 되면 10일간 매일 한가지 제품을 할인받을 수 있다. 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입을 하려고 한다.
원하는 제품을 담은 want 배열과 원하는 제품의 수량을 담은 int 배열 number, 할인하는 제품을 담은 배열 discount가 주어진다. 회원 등록시 원하는 제품을 모두 할인받을 수 있는 회원 등록 날짜의 총 일수를 return 해라. 가능한 날이 없으면 0 을 반환해라.

풀이 과정

  • 카운터와 슬라이딩 윈도우를 사용해서 문제를 풀어봤다.

  • 원하는 상품과 개수를 딕셔너리로 만든다. dict(zip(want,number))를 사용하면 want를 key로 number를 value로 하는 dict를 만들 수 있다.

  • 반복문으로 슬라이딩 윈도우 기법을 사용해 10일 간격으로 할인 목록을 확인한다. 현재일부터 10일까지의 window를 만들고, 이를 카운터로 바꿔서 몇개의 품목이 있는지 확인한다.

  • all() 함수와 리스트 컴프리헨션을 이용해서 현재 10일동안의 할인 목록에서 원하는 상품 이상만큼 다 있는지 확인한다. 다 만족하면 count를 늘려준다. 최종적으로 count를 반환하면 완료!


Python 코드

from collections import Counter

def solution(want, number, discount):
    want_dict = dict(zip(want, number))
    total = len(discount)
    days = 10
    count = 0
    
    for i in range(total-days+1):
        current_window = discount[i:i+days]
        current_count = Counter(current_window)
        
        if all(current_count[item] >= want_dict[item] for item in want_dict):
            count += 1
    
    return count
profile
Backend Dev / Data Engineer

0개의 댓글