728x90

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

 

프로그래머스

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

programmers.co.kr

 

# 틀림 - 다 같은 할인율인 줄 알았다..

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

모든 경우의 수를 다 했더니 됐다. 야~호.

오랜만에 순열을 쓰니까 재밌었다. 다른 언어는 어떻게 순열하려나 ¿

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기