본문 바로가기

코딩테스트/프로그래머스

코딩테스트 연습 연습문제 할인 행사

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

 

프로그래머스

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

programmers.co.kr

def solution(want, number, discount):
    answer = 0
    for i in range(len(discount)):
        daydiscount = discount[i:i+sum(number)]
        
        count =0
        for index, w in enumerate(want):
            if daydiscount.count(w) >= number[index]:
                count+=1
            else:
                break
        if count == len(number):
            answer+=1
    
    return answer

이 문제는 XYZ 마트에서 회원 등록을 하기 위해 할인 행사 기간 중 정확히 원하는 제품과 수량을 할인 받을 수 있는 연속된 날짜를 찾는 문제입니다. 주어진 입력에 따라 할인 행사 일정과 정현이의 원하는 제품과 수량을 비교하여 연속된 날짜를 찾고, 해당 일수를 반환하는 함수를 구현해야 합니다.

 

처음 이 문제를 봤을 때 for문과 if문을 한번씩 더 돌려 문제를 해결하려 했습니다.

["banana", "apple", "rice", "pork", "pot"] [3, 2, 2, 2, 1] 를 풀어

["banana", "banana", "banana", "apple", "apple", "rice", "rice", "pork", "pork", "pot"]

와 같이 하나의 배열로 만들고 각 요소와 일정의 과일을 각각 비교,

하나하나 remove()를 하여 배열에 들어있는 것을 다쓰면 answer+=1을 해 정답을 구하려 했습니다.

 

그러나 효율적인면에서, 구현하는 면에서 별로 좋은 생각은 아니라고 생각이 들었고,

count 함수를 사용하는 게 효율적이라는 생각이 들었습니다.

원래 구현하려던 배열은 포기하고, number의 합을 구해 새로운 daydiscount를 구성하니, 효율적으로 답을 구할 수 있었습니다.