본문 바로가기
알고리즘/프로그래머스

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

by 개발하는 호랑이 2024. 2. 8.

할인 행사

풀이

시간초과는 나지 않을까 어떻게 풀까 하다가 이중 for문에 for-else문을 사용하기로 했다.

  1. 첫번째 for문에서 discount를 10일간격으로 확인할 수 있게 함
  2. 두번째 for문에서 행사 첫째날부터 마지막날까지의 행사 품목과 구매 갯수를 입력시킴
  3. 이를 3번째 for문에서 정현이가 원하는 구매 품목 갯수와 비교하여서, for-else문을 통해 answer += 1을 완성
  4. answer를 반환
# xyz 마트 금액 지불 시 10일 동안 회원 됨
# 매일 1가지 제품 할인 행사. 이 제품은 하루에 하나씩만 구매 가능
# 정현이는 원하는 제품과 수량이 할인하는 날짜와 10일 연속으로 일치할 경우에 맞춰서 회원가입 할 거임
# want는 정현이가 원하는 제품
# number는 want에 맞게 수량
# discount는 XYZ마트가 할인하는 제품 순서
# 원하는 제품 모두 할인 가능하면 회원 등록  가능한 날 수를 반환
# 없으면 0을 반환

def solution(want, number, discount):
    answer = 0
    for i in range(len(discount)-9):
        can_buy = {}
        # 각 날짜별 할인 물품 can_buy에 입력
        for j in range(i, i+10):
            if can_buy.get(discount[j]):
                can_buy[discount[j]] += 1
            else:
                can_buy[discount[j]] = 1
        # 확인하기
        for k in range(len(want)):
            if (want[k] not in can_buy) or can_buy[want[k]] < number[k]:
                break
        else:
            answer += 1    
    return answer

다른 사람 풀이

매번 느끼지만 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