본문 바로가기
Algorithm/Programmers

[Programmers / Level2] 할인 행사

by 개복취 2024. 1. 27.

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

 

프로그래머스

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

programmers.co.kr


 

<내 코드>

from collections import Counter

def solution(want, number, discount):
    result = 0
    goods, sum_num = {}, sum(number)
    for product, cnt in zip(want, number):
        goods[product] = cnt
    counter_goods = Counter(goods)
    
    for i in range(len(discount) - sum_num + 1):
        c = Counter(discount[i: i + sum_num])
        
        c.subtract(goods)

        if all(value == 0 for value in c.values()):
            result += 1
    return result

-> 지난번 귤고르기 문제에서 Counter클래스를 사용한 dict를 통해 값을 처리했었는데 한번 클래스의 메소드를 모두 사용하는 방법을 해봤다. 굳이 subtract등을 사용하지 않아도 되고 선언해준 dict에서 슬라이싱 discount 배열에서 Counter으로 바로 비교하는 방법을 하는게 좋은 방법이라고 느껴졌다. (사실 Counter객체와 딕셔너리 객체와 비교가 되는지 몰랐다..)

 

<정해코드>

from collections import Counter
def solution(want, number, discount):
    answer = 0
    dic = {}
    for i in range(len(want)):
        dic[want[i]] = number[i]

    for i in range(len(discount)-9):
        if dic == Counter(discount[i:i+10]): 
            answer += 1

    return answer