[Programmers] 2023 KAKAO 기출 택배, 이모티콘 LV2

Jihoon·2023년 3월 28일
0

알고리즘

목록 보기
12/14

🤔 택배 배달과 수거하기 LV2 - 구현

def solution(cap, n, deliveries, pickups):
    deliveries = deliveries[::-1]
    pickups = pickups[::-1]
    answer = 0

    have_to_deli = 0
    have_to_pick = 0

    for i in range(n):
        have_to_deli += deliveries[i]
        have_to_pick += pickups[i]

        while have_to_deli > 0 or have_to_pick > 0:
            have_to_deli -= cap
            have_to_pick -= cap
            answer += (n - i) * 2

    return answer

deliveries[::-1] 활용해서 리스트 뒤집기
원래, reverse 활용하려했는데 이게더 깔끔!

while 문으로 구현할 생각을 못했다... 이렇게 하면 해당 배달지역이 완료될 때 까지 계속 왔다갔다하는 거리를 구할 수 있음 !


🤔 이모티콘 할인행사 LV2 - DFS

discounts = [10, 20, 30, 40]
answer = [-1, -1]

def solution(users, emoticons):
    n, m = len(users), len(emoticons)
    # Memorizaion -> Dict 쓰려고 했는데, 이게 훨 낫구나..
    discount_list = [0]*m
    
    def search(idx):
        global answer
        if idx == m :
            sale_num, cost_num = 0, 0
            for i in range(n) :
                tmp = 0
                for j in range(m) :
                    if users[i][0] <= discount_list[j] :
                        tmp += emoticons[j] * ( 100 - discount_list[j] ) // 100
                if tmp >= users[i][1] :
                    sale_num += 1
                else :
                    cost_num += tmp
            if sale_num > answer[0] or sale_num == answer[0] and cost_num > answer[1] :
                answer = [sale_num, cost_num]
            return
        
        # DFS 내의 리스트 변수 할당을 통해 값 갱신
        for i in range(4) :
            discount_list[idx] = discounts[i]
            search(idx+1)
    
    search(0)
    
    return answer

Memorization 생각을 어떻게 한 걸까?
음.. 할인율을 저장하긴 해야하기 때문에 이를 list로 표현했겠지?
그러겠구만 ! 변수설정으로 DFS내에서 작동하기에 따로 copy쓸 필요도 없고, 정말 잘 짠 코드인 것 같다

그리고, 함수 내의 함수에 변수를 따로 만들지 않으면 편하게 쓸 수 있구나
users, emoticons 그대로 내부 함수에 쓰는 거보니 이게 훨 편하겠구나 싶다

profile
장난감이 데이터인 사람

0개의 댓글