본문 바로가기

프로그래머스 퀴즈(Python)/level 2

23.02.10 파이썬 코딩 퀴즈#147 할인 행사 (프로그래머스 스쿨)

이번 문제는 할인 행사 문제이다.

별다른 설명이 없는 문제이기에 위의 지문을 최대한 잘 읽고 해결 방향을 잡아야 한다.

먼저 구매하고자 하는 품목과 수량이 전달된다. 그리고 마트에서 할인하는 제품을 나타내는 문자열 discount 가 주어진다.

반환해야 하는 것은 바로 구매를 원하는 제품을 모두 할인 받을 수 있는 회원등록 날짜의 총 일수이다.

이때 회원가입 날짜의 기준은 10일 연속이다. 왜냐하면 회원 자격은 10일 동안만 유지가 되기 때문이다.

위 설명에 따르면 치킨, 사과, 사과, 바나나, 쌀, 사과, 돼지고기, 바나나, 돼지고기, 쌀, 냄비, 바나나, 사과, 바나나 를 날짜에 맞춰서 할인을 한다.

만약 첫째날(치킨) 회원가입을 하면, 최종적으로, 1치킨, 3사과, 2바나나,2 쌀, 2돼지고기는 할인을 받지만, 냄비는 할인받지 못한다.  그리고 이때 할인하는 품목은 1개만 구매 가능하며, 바나나도 3개 구매해야 하지만 바나나는 2개 밖에 구매할 수 없다.

두번째 날에는 냄비는 할인받아 구매 가능하지만, 역시 바나나는 2개밖에 구매할 수 없다.

세번째 날에는 모든 품목의 구매가 가능하고, 네번째 날과 다섯번째 날도 동일하다.

따라서 3을 return 하게 된다.

설명이 굉장히 길었지만, 코드는 간단하게 작성된다.

먼저 wanted 에 구매해야 하는 품목과 수량을 저장하고, discount 를 10 단위로 슬라이싱 하여 탐색한다. 만약 wanted의 key값이 있으면 해당 수량을 -1, 없다면 다음 품목을 찾는다.

한가지 중요한건 이렇게 반복문을 탈출한 wanted 의 values으 값 처리이다. 합으로 계산하게 되면 -1 인 경우와 +1 인 경우가 만나서 같이 0이 된다. 따라서 set()을 이용한 집합처리로 모두 구매한 건지 확인하였다.