본문 바로가기

알고리즘

프로그래머스) 할인행사-python

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

문제는 이해하기 좀 쉬웠다.

 

다만 구현이 문제였다.

discount의 갯수가 10만개라 이중 반복문은 사용할 수 없다.

때문에 for문 하나로 끝냈어야 하는데, 거기서 1시간은 해맸었던 것 같았다.

 

import math
from collections import Counter

def solution(want, number, discount):
    answer = 0
    dic = {}
    for i in range(len(want)):
        dic[want[i]] = number[i]
        
    dic_count = Counter(dic)
    for i in range(0,len(discount) - 9):
        a = discount[i:i+10]
        a.sort()
        b = Counter(a)
        c = dic_count & b
        if c == dic_count:
            answer+=1
    return answer

우선 want와 number를 딕셔너리로 담아 갯수를 구한 후 Counter모듈에 담았다. 이를 dic_count라 하겠다.

 

이후 discount의 반복문을 통해 

10개까지 리스트에 담고, Counter에 담는다. 이를 b라고 하겠다.

그 이후 치킨이나 다른 want에 없는 것들을 제외하기 위해 교집합 &을 구했고, (이를 c라 하겠다.)

c와 dic_count를 비교해, 같으면 answer += 1

생각해보니 교집합을 구하므로, a.sort()는 필요없는 구문같다.