[프로그래머스] 할인 행사

박형진·2023년 1월 6일
0

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


1. 코드

from collections import defaultdict 

def solution(want, number, discount):
    def check():
        for key in want_d:
            if key in d and d[key] >= want_d[key]:
                pass
            else:
                return False
        return True
        
    
    answer = 0
    d = defaultdict(int)    
    want_d = defaultdict(int)
    
    for i in range(len(number)):
        want_d[want[i]] = number[i] 
    
    #초기 윈도우 SET: 0~9 idx
    for i in range(10):
        d[discount[i]] += 1
    if check():
        answer += 1
        
    for start in range(1, len(discount)-9):
        end = start + 9

        d[discount[start-1]] -= 1
        d[discount[end]] += 1
        if d[discount[start-1]] == 0:
            del d[discount[start-1]]
        
        if len(d) == len(want_d) and check():
            answer += 1
             
    return answer

2.후기

[리트코드] 438. Find All Anagrams in a String 이 문제와 100% 일치한다. 윈도우 크기가 고정된 문제는 start를 for문의 변수로 사용하면 코드 작성하기 쉬워진다.

range()는 직접 print()를 찍어보면서 값을 조정했다.

for start in range(1, len(discount)-9):
	end = start + 9
    print(start, end, discount[start], discount[end]

>>print
1 10 apple pot
2 11 apple banana
3 12 banana apple
4 13 rice banana
profile
안녕하세요!

0개의 댓글