728x90
https://school.programmers.co.kr/learn/courses/30/lessons/150368
# 틀림 - 다 같은 할인율인 줄 알았다..
import math
def solution(users, emoticons):
answer = [0, 0]
hap_l = []
min_rate = min([math.ceil(user[0]*0.1) for user in users])
min_rate = 1 if min_rate == 0 else min_rate
print(min_rate)
for rate in range(min_rate, 5):
l = [0, 0]
for user in users:
hap = 0
# print('user', user)
for emoticon in emoticons:
print('user', user, 'emoticon', emoticon, 'rate', rate)
if user[0] <= rate*10:
hap += (emoticon*(10-rate)*0.1)
print(emoticon*(10-rate)*0.1)
if hap >= user[1]:
l[0] += 1
hap = 0
else:
l[1] += hap
print(l)
if answer[0] < l[0]:
answer = l
elif answer[0] == l[0]:
if answer[1] < l[1]:
answer = l
hap_l.append(l)
print(hap_l)
print(answer)
return answer
# 정답
import itertools, math
def solution(users, emoticons):
answer = [0, 0]
min_rate = min([math.ceil(user[0]*0.1) for user in users])
max_rate = max([user[0]//10 for user in users] + [4])
rate = [r for r in range(min_rate, max_rate+1)]
case_rate = [list(i) for i in itertools.product(rate, repeat=len(emoticons))]
for rate in case_rate:
l = [0, 0]
for user in users:
hap = 0
for e in range(len(emoticons)):
if user[0] <= int(rate[e]*10):
hap += (emoticons[e]*(10-rate[e])*0.1)
if hap >= user[1]:
l[0] += 1
else:
l[1] += hap
if l[0] > answer[0]:
answer = l
elif l[0] == answer[0]:
if l[1] > answer[1]:
answer = l
return answer
모든 경우의 수를 다 했더니 됐다. 야~호.
오랜만에 순열을 쓰니까 재밌었다. 다른 언어는 어떻게 순열하려나 ¿
반응형
'전.py' 카테고리의 다른 글
[python] 프로그래머스 표 병합 (0) | 2023.01.17 |
---|---|
[python] 프로그래머스 두 큐 합 같게 만들기 (0) | 2023.01.17 |
[python] 프로그래머스 택배 배달과 수거하기 (0) | 2023.01.12 |
[python] 프로그래머스 개인정보 수집 유효기간 (2) | 2023.01.11 |
[python] 프로그래머스 성격 유형 검사하기 (0) | 2023.01.11 |