문제
문제 이해
- 마트는 일정 금액을 지불하면 10일간 회원 자격 부여
- 마트에서는 회원을 대상으로 매일 한 가지 제품을 할인하는 행사를 진행
- 원하는 제품과 수량을 구매할 수 있을 때 회원 등록 진행
- 회원 등록 시 원하는 제품을 모두 할인 받을 수 있는 날짜의 총 일수는?
- 원하는 제품 문자열 배열 want, 수량 정수 배열 want, 14일간 할인 제품 문자열 배열 discount
풀이
want와 number을 매치하여 10일 간 모두 할인 받을 수 있는지 확인한다.
조건을 활용하여 최소한의 탐색으로 모든 경우를 찾는 것을 목표로 한다.
- want-number를 매치하여 해당 날부터 10일 간 구매할 수 있는지 확인
- 모든 제품을 구매할 수 있으면 cnt 1 증가
- 1 ~ 2를 len(discount) - sum(number) + 1 만큼 반복
<제품 구매 여부 확인 방법>
1. zip(want, number)를 활용한 반복문 활용
2) 해당 날짜에서 10일 간 해당 제품을 수량만큼 구매할 수 있는지 확인
3-1) 구매가 가능하다면 다음 제품 확인
3-2) 구매가 불가능하다면 바로 다음 날짜 진행
4) 모든 제품 구매 가능시 cnt += 1
<len(discount) - sum(number) + 1 반복>
최소한 number의 합만큼 확인해보아야 하기 때문에 해당 조건을 적용하여 조금이나마 시간을 단축
코드
def solution(want, number, discount):
cnt = 0
check = 0
for i in range(len(discount) - sum(number) + 1):
for w, n in zip(want, number):
num = n
for j in range(i, i + 10):
if discount[j] == w:
num -= 1
if num != 0:
check = 1
break
if check == 1:
check = 0
else:
cnt += 1
return cnt
'알고리즘 연습 > 프로그래머스' 카테고리의 다른 글
[Python - Lv.2] n^2 배열 자르기 (0) | 2024.03.17 |
---|---|
[Python - Lv.2] [1차] 캐시 (0) | 2024.03.16 |
[Python - Lv.2] 괄호 회전하기 (0) | 2024.03.14 |
[Python - Lv.2] 예상 대진표 (0) | 2024.03.13 |
[Python - Lv.2] N개의 최소공배수 (0) | 2024.03.12 |