택배 배달과 수거하기 (그리디)

2023. 4. 7. 16:39·Coding Test/programmers
728x90
"""
트럭에 실을 수 있는 재활용 택배 상자의 최대 개수 cap,
배달할 집의 개수를 나타내는 정수 n,
각 집에 배달할 재활용 택배 상자의 개수를 담은 1차원 정수 배열 deliveries
각 집에서 수거할 빈 재활용 택배 상자의 개수를 담은 1차원 정수 배열 pickups

트럭 하나로 모든 배달과 수거를 마치고 물류창고까지 돌아올 수 있는 최소 이동 거리
"""


def solution(cap, n, deliveries, pickups):
    answer = 0

    # 먼곳부터 배달하기위해 뒤집기
    deliveries = deliveries[::-1]
    pickups = pickups[::-1]
    print("cap", cap)
    print(deliveries, pickups)

    # 배달해야 하는 양
    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

print(solution(4, 5, [1, 0, 3, 1, 2], [0, 3, 0, 4, 0]))
print(solution(2, 7, [1, 0, 2, 0, 1, 0, 2], [0, 2, 0, 1, 0, 2, 0]))
더보기

가장 먼 집부터 배달 상자 수와 수거 상자 수를 각각 누적 합을 구한 후,

둘 중에 하나가 cap을 넘는다면 누적한 배달 상자 수와 수거 상자 수를 각각 cap만큼 비우면서

이동한 거리를 answer에 더하는 방법

 

cap만큼 비우면서 누적 배달 상자 수 또는 수거 상자 수가 음수가 될 수 있습니다.

적 상자 수가 cap만큼 덜 채워졌을 경우로, 다음 집의 상자를 미리 배달하거나 수거하는 효과를 가져서 음수가 되어도 괜찮습니다.

 

728x90
저작자표시 (새창열림)
'Coding Test/programmers' 카테고리의 다른 글
  • 표병합 (구현, 유니온파인드)
  • 개인정보 수집 유효기간 (문자열, 구현)
  • 이모티콘 할인행사 (완전 탐색, 조합)
  • 미로 탈출 명령어 (DFS, 백트래킹)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    재귀
    그리디
    큐
    파이썬
    조합
    정렬
    최소신장트리
    BFS
    DP
    LIS
    자료구조
    최단거리
    다익스트라
    그래프
    플로이드워셜
    이분탐색
    동적계획법
    최대공약수
    구현
    구간합
    알고리즘
    힙
    덱
    트리
    프로그래머스
    백준
    DFS
    Algorithm
    스택
    월간코드챌린지
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
택배 배달과 수거하기 (그리디)
상단으로

티스토리툴바