택배 배달과 수거하기

YeonJu Kim·2023년 1월 17일
0

카카오 코테 준비

목록 보기
1/1

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

간단한 문제라서 나이브하게 풀었다.
가장 뒤에 있는 box부터 처리하게 하는 방식으로 풀었다.

def findNonZero(arr, end):
	'''
    end라는 인덱스부터 시작하여 값이 zero가 아닌 인덱스를 리턴하는 함수
    '''
    for i in reversed(range(end + 1)):
        if arr[i] != 0:
            return i
    return -1

def eliminateBox(arr, idx, cap):
    '''
    인덱스가 큰 것부터 처리하는 함수
    '''
    if idx < -1:
        return -1
    for i in reversed(range(idx + 1)):
        if arr[i] >= cap:
            arr[i] = arr[i] - cap
            return findNonZero(arr, idx)
        elif arr[i] < cap:
            cap = cap - arr[i]
            arr[i] = 0
    return -1

def solution(cap, n, deliveries, pickups):
    answer = 0
    d_idx = findNonZero(deliveries, len(deliveries) - 1)
    p_idx = findNonZero(pickups, len(pickups) - 1)
    while (d_idx >= 0 or p_idx >= 0):
        # d_idx 와 p_idx 에는 상자가 있어야함
        d_cap = cap
        p_cap = cap
        answer = answer + max(d_idx, p_idx) + 1
        d_idx = eliminateBox(deliveries, d_idx, d_cap)
        p_idx = eliminateBox(pickups, p_idx, p_cap)
    return answer * 2

findNonZero 함수 부족한 점

  • 계층이 2단계
  • end보다는 start_idx가 낫을 듯
  • 함수 명도 find_nonzero_idx가 낫았을 듯

eliminateBox 함수 부족한 점

  • 계층이 많음
  • 함수명도 deliver_box가 어땠을까?
  • cap보다 capa가 더 capacity를 나타내지 않았을까?

solution

  • d_idx, p_idx 이거 너무 모호하지 않나? 이걸로 deliver index, pickup index라는 것을 알 수 있나?
profile
2023년 기록, 2023년 계획 : 연구, 블로그, 컨트리뷰션

0개의 댓글