본문 바로가기
프로그래머스/2단계

(Python/LV2) 할인행사

by windy7271 2022. 10. 26.
728x90
반응형

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이 과정:

 

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
반응형

댓글