chyam

[프로그래머스 Lv2, python]- 할인 행사 본문

프로그래머스/LV2

[프로그래머스 Lv2, python]- 할인 행사

chyam_eun 2025. 1. 2. 10:39

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

def solution(want, number, discount):
    dic={}
    ans=0 # 가능한 일 수
    for a in range(len(want)): # 각각의 개수를 딕셔너리로 묶기
        dic[want[a]]=number[a]
    for a in range(0,len(discount)-9):
        cnt=0 # 반복 횟수
        while(cnt<10): # 10번 반복
            if discount[a+cnt] not in dic: # 딕셔너리에 없으면 바로 break
                break
            else: 
                if dic[discount[a+cnt]]>0: # 0보다 클때 1씩 감소
                    dic[discount[a+cnt]]-=1
            cnt+=1
        value=dic.values() # 각 value들만 보기
        max_value=max(value) 
        if max_value==0: # 최대값이 0이면 가능한 일 수 더해주기
            ans+=1
        for a in range(len(want)): # 각각의 개수를 딕셔너리로 묶기. 0으로 만들어버려서 다시 해야함
            dic[want[a]]=number[a]
    return ans

위풀이는 처음 성공한 풀이이다.

아래는 Counter을 사용한 풀이이다. 

from collections import Counter
def solution(want, number, discount):
    dic={}
    ans=0
    for a in range(len(want)):
        dic[want[a]]=number[a]
    for a in range(0,len(discount)-9):
        count=Counter(discount[a:a+10]) # a번째부터 a+9번째 인덱스까지를 딕셔너리로 만듬
        if dic==count: # 같으면 증가
            ans+=1
    return ans