본문 바로가기

99클럽 코테 스터디

99클럽 코테 스터디 28일차 (프로그래머스 이모티콘 할인)

오늘의 문제: 프로그래머스 이모티콘 할인

문제 설명

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 풀이

1. [10, 20, 30, 40] 할인율을 이모티콘 수에 따른 모든 경우의 수 구하기

2. 1번에서 구한 할인율 경우의 수 완전탐색으로 탐색하면서 2가지 조건(1. 이모티콘 플러스 서비스 가입자를 최대한 늘리는 것, 2. 이모티콘 판매액을 최대한 늘리는 것)에 맞는 할인율 경우의 수 구하기

from copy import deepcopy
comb = []

def dfs(discount, length, dis_list):
    global comb
    if len(dis_list) == length:
        comb.append(dis_list)
        return
    
    for dis in discount:
        copy_list = deepcopy(dis_list)
        copy_list.append(dis)
        dfs(discount, length, copy_list)
    
def solution(users, emoticons):
    global comb
    length = len(emoticons)
    discount = [10, 20, 30, 40]
    dis_list = []

    dfs(discount, length, dis_list)
    answer = [0, 0]
    for dis_comb in comb:
        result = [0, 0]
        for user in users:
            check = user[0]
            plus = user[1]
            cost = 0
            
            for i in range(length):
                if dis_comb[i] >= check:
                    cost += (emoticons[i] *((100-dis_comb[i])/100))
            
            if cost >= plus:
                result[0] += 1
                cost = 0
            
            else:
                result[1] += cost
        

        if answer[0] < result[0]:
            answer[0] = result[0]
            answer[1] = result[1]
        
        elif answer[0] == result[0]:
            if answer[1] < result[1]:
                answer[1] = result[1]
    
        
    return answer