아무나개발하자

할인 행사 본문

코딩테스트

할인 행사

개발천재나천재 2022. 12. 26. 08:25

문제

https://school.programmers.co.kr/learn/courses/30/lessons/131127

 

프로그래머스

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

programmers.co.kr

 

 

풀이

"""
want 
{"바나나" : 3}
{"사과" : 2}
{"쌀" : 2}
{"돼지고기" : 2}
{"냄비" : 1}

1일 : 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀
2일 : 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비
3일 : 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나
4일 : 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과
5일 : 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나

0-9까지는 queue에 넣어두고, 10-len(discount)는 리스트에 넣어서 한개씩 추가하기
<문제 해결 방법>
1. want와 number를 통해 user_want라는 dictionary를 만든다.
2. discount를 10개씩 자르는 discount_queue를 생성, 자르고 나머지를 담은 append_list생성
3. answer은 일단 모든 경우의 수가 성공할 수 있다고 가정하고, 안되면 -1 하는 방식으로 유도 (왜냐하면 조건이 만족 안하면 -1하고 break하면됨)
4. 첫번째는 10개로 짤린 discount_queue에서 count를 한다 (조건 만족하지 않으면 -1)
5. 두번째서 부터는 discount_queue를 popleft, append(append_list)를 하면서 discount_queue를 생성해서 첫번째 행위를 반복
"""

from collections import deque

def solution(want, number, discount):
    answer = 0
    discount_queue = deque()
    append_list = []
    user_want = {}
    
    for i in range(len(want)):
        user_want[want[i]] = number[i]
    
    for i in range(len(discount)):
        if (i < 10):
            discount_queue.append(discount[i])
        else:
            append_list.append(discount[i])
    
    """
    다 만족해서 +1 하는것보다 일단 다 만족한다고 가정해서 다 더하고, 하나라도 만족하지 않으면 -1하는게 더 편함
    """
    answer = len(append_list) + 1
    for key, value in user_want.items():
        if (discount_queue.count(key) < value):
            answer -= 1
            break
        
    for elem in append_list:
        discount_queue.popleft()
        discount_queue.append(elem)
        
        for key, value in user_want.items():
            if (discount_queue.count(key) < value):
                answer -= 1
                break
        
    return answer

 

 

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

'코딩테스트' 카테고리의 다른 글

크기가 작은 부분 문자열  (0) 2023.01.02
귤 고르기  (0) 2022.12.30
짝지어 제거하기  (0) 2022.12.25
2개씩 그룹짓기  (0) 2022.08.05
완전수 판별기  (0) 2022.08.03