728x90
반응형
문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131127
풀이 과정:
1.
if sum(number) > len(discount): # 할인진행기간보다 사고싶은게 많을경우
return 0
for i in want: # 사려는 항목이 할인을 안 하는 경우
if i not in discount:
return 0
2.
want_dic = {i:0 for i in want}
for want, count in zip(want_dic, number):
want_dic[want] += count
사려는 물건들 딕셔너리로 해놓음
3.
len_discount_number = len(discount) - sum(number)
ans = 0
len(discount) 는 15개 (인덱스는 14)
discount 길이와 사려는 총 갯수를 뺐을때
즉, 문제 예시로는 0부터 9/ 1부터 10 ... 이니까 최대 5부터 14까지니까 5가 나오게 하기 위해서
14 - 10 은 4 로
0 부터 4까지 총 5개를 하면 된다.
밑에 while 문을 써서 하려고 했지만 안돼서 함수를 하나 더 만듦
def solution2(len_discount_number, want, number, discount) :
want_dic = {i:0 for i in want}
for want, count in zip(want_dic, number):
want_dic[want] += count
for i in discount[len_discount_number:len_discount_number+10]:
if i in want_dic:
want_dic[i] -= 1
if any(want_dic.values()) != 0:
return 0
else: return 1
dic 을 만들어주고 10개씩 0부터10 1부터10개 이런식으로 해서
if문의 any 함수를 사용하여 하나라도 0 이 아니면 0을 리턴
다 0 이면 모두 할인 받을 수 있으므로 1을 리턴
for i in range(len_discount_number+1):
if solution2(i, want, number, discount) == 1:
ans += 1
return ans
리턴 받은 값이 1이면 ans += 1
전체 코드:
def solution2(len_discount_number, want, number, discount) :
want_dic = {i:0 for i in want}
for want, count in zip(want_dic, number):
want_dic[want] += count
for i in discount[len_discount_number:len_discount_number+10]:
if i in want_dic:
want_dic[i] -= 1
if any(want_dic.values()) != 0:
return 0
else: return 1
def solution(want, number, discount):
if sum(number) > len(discount): # 할인진행기간보다 사고싶은게 많을경우
return 0
for i in want: # 사려는 항목이 할인을 안 하는 경우
if i not in discount:
return 0
len_discount_number = len(discount) - sum(number)
ans = 0
for i in range(len_discount_number+1):
if solution2(i, want, number, discount) == 1:
ans += 1
return ans
반응형
댓글