문제
https://school.programmers.co.kr/learn/courses/30/lessons/150368
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
나의 풀이
def solution(users, emoticons):
answer = [0, 0]
data = [10, 20, 30, 40]
discount = []
def dfs(L,tmp):
if L == len(tmp):
discount.append(tmp[:])
return
else:
for i in data:
tmp[L]+=i
dfs(L+1,tmp)
tmp[L]-=i
dfs(0,[0]*len(emoticons))
for dis in discount:
cnt = 0
get = 0
for u in users:
pay = 0
for j in range(len(dis)):
if u[0] <= dis[j]:
pay += emoticons[j]*(100-dis[j])/100
if pay >= u[1]:
pay = 0
cnt += 1
get += pay
if cnt >= answer[0]:
if answer[0] == cnt:
answer[1] = max(answer[1], get)
else:
answer[1] = get
answer[0] = cnt
return answer
풀이 해설
이 문제를 풀면서 할인비율을 얼마로 측정해야할지 고민이 많았고, 우선순위로 어떤값을 뽑아야하는지 고민이 많았다.
1. 이모티콘 할인비율을 DFS로 조합을 이룬다
2. 조합비율을 기준으로, 유저별로 완전탐색을 진행한다
3. 유저의 할인비율을 비교
- 할인비율을 충족하지만, 내 금액을 넘으면 이모티콘 구매 변수를 늘린다
- 아니라면, 구매 금액에 추가한다
4. 이후, answer의 값의 우선순위별로 비교해서 값을 갱신한다.
회고
완전탐색이면서 조합을 만드는데 dfs를 사용하는 방법을 배울 수 있었다.
'💡 Codeing Test > 프로그래머스' 카테고리의 다른 글
[프로그래머스 lv2] 후보키 (python) (0) | 2024.02.29 |
---|---|
프로그래머스) 두 개 뽑아서 더하기 (0) | 2023.03.23 |
프로그래머스) 문자열 내 마음대로 정렬하기 (python) (0) | 2023.03.23 |
프로그래머스) 최댓값 만들기(2) (JAVA) (0) | 2023.03.05 |
프로그래머스) 124나라의 숫자 (Java & Python) (0) | 2023.03.05 |