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

일단 해볼게·2024년 3월 18일
0

프로그래머스

목록 보기
102/106

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

def solution(want, number, discount):
    answer = 0
    
    for i in range(len(discount)):
        if discount[i] not in want: # 처음에 원하는 제품이 없는 경우
            continue
        
        flag = 1 # 모두 할인 받는 경우 : 1
        temp_number = number.copy()  
        
        for j in range(i, 10 + i):
            if j >= len(discount):  # 인덱스 오류 방지
                flag = 0
                break
            
            if discount[j] in want: # 범위 내에 원하는 제품이 있는 경우
                idx = want.index(discount[j])
                temp_number[idx] -= 1
                
                if temp_number[idx] < 0:
                    flag = 0
                    break
            else: # 범위 내에 원하는 제품이 없는 경우
                flag = 0
                break
        
        if flag == 1:
            answer += 1
            
    return answer

다른 사람 코드

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

내 코드의 want.index(discount[j]) 부분을 dictionary로 구현해서 반복되는 코드를 효율적으로 작성했다.
dictionary 하나를 만들고 Counter로 범위마다 dictionary를 생성해 비교한다.

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글