반응형
Programmers 할인 행사 문제
https://school.programmers.co.kr/learn/courses/30/lessons/131127
1차 풀이 (실패)
일단 want와 number의 데이터를 dictionary로 하나로 묶었다
원하는 물건 want의 숫자인 number이 다 없어지면 answer값을 늘려주는 형식의 코드를 쓰면 성공할 거 같다.
"""
10일 -> 회원 자격
할인 제품 -> 하루에 하나씩 구입 가능
회원 등록시 원하는 제품을 모두 할인 받을 수 있는 날짜 구하기
"""
def solution(want, number, discount):
answer = 0
dict = {}
for i, j in zip(want, number):
dict[i] = j
# print(dict)
accountSale = 10
skiploop = len(discount) - accountSale
for i in range(skiploop):
count = accountSale
for j in range(i, len(discount)):
if discount[j] in dict:
#print(discount[j], dict[discount[j]])
dict[discount[j]] -= 1
count -= 1
if count == 0:
answer += 1
else:
#print("break")
break
return answer
결국에는 이중 for loop가 상당히 중요한거 같다!
for i in range(skiploop):
for j in range(i, len(discount)):
2차 풀이 (성공)
dict의 요소들 중에서 want 물건들을 다 구매하면 성공! 하는 듯한 코드로 바꾸면 성공할 거 같다.
"""
10일 -> 회원 자격
할인 제품 -> 하루에 하나씩 구입 가능
회원 등록시 원하는 제품을 모두 할인 받을 수 있는 날짜 구하기
"""
def solution(want, number, discount):
answer = 0
want_dict = {}
for i, j in zip(want, number):
want_dict[i] = j
# print(dict)
accountSale = 10
skiploop = len(discount) - sum(number) + 1
for i in range(skiploop):
count = accountSale
num = len(number)
dict = want_dict.copy()
for j in range(i, len(discount)):
if discount[j] in want:
count -= 1
dict[discount[j]] -= 1
if dict[discount[j]] == 0:
num -= 1
if num == 0:
answer += 1
break
if count == 0:
break
else:
#print("break")
break
return answer
728x90
반응형
'코딩 테스트 > Programmers' 카테고리의 다른 글
[Python] [Level 2] 혼자서 하는 틱택토 (너무 싫은 문제) (0) | 2023.03.10 |
---|---|
[Python] [Level 2] 덧칠하기 (파이썬 tmp 활용하기) (0) | 2023.03.10 |
[Python] [Level 2] 피로도 (완전 탐색) (itertools 라이브러리permutation 순열로 풀기) (0) | 2023.03.07 |
[Python] [Level 2] 전화번호 목록 (Hash 해시 : 파이썬 dictionary 활용하기) (0) | 2023.03.06 |
[Python] [Level 2] 프린터 (Priority Queue 우선순위 큐) (0) | 2023.03.03 |