할인 행사
풀이
시간초과는 나지 않을까 어떻게 풀까 하다가 이중 for문에 for-else문을 사용하기로 했다.
- 첫번째 for문에서 discount를 10일간격으로 확인할 수 있게 함
- 두번째 for문에서 행사 첫째날부터 마지막날까지의 행사 품목과 구매 갯수를 입력시킴
- 이를 3번째 for문에서 정현이가 원하는 구매 품목 갯수와 비교하여서, for-else문을 통해 answer += 1을 완성
- 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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 가장 많이 받은 선물 (python) (1) | 2024.02.10 |
---|---|
프로그래머스 Lv1 실패율(python) (1) | 2024.02.09 |
프로그래머스 Lv2 피로도 (python) (0) | 2024.02.07 |
프로그래머스 Lv2 귤 고르기(python) (0) | 2024.02.06 |
프로그래머스 Lv1 덧칠하기 (python) (1) | 2024.02.05 |