반응형
코딩테스트 연습 - 택배 배달과 수거하기 | 프로그래머스 스쿨 (programmers.co.kr)
<문제 풀이>
- Greedy 문제로 이 문제에서는 먼 곳부터 배달, 수거를 하는 방식으로 진행했다.
- pop을 이용해 배달, 수거를 해야할 가장 먼 집들을 찾는다.
- 물류창고에서 배달 or 수거를 하고 다시 돌아와야 하기 때문에 answer에는 왕복거리를 계산하기 위해 *2를 하며, 배달 or 수거 중 먼거리를 수행한다.
- 배달과 수거의 경우를 나누어 아래 코드와 같이 체크하면서 연산을 진행했다.
<Code>
def solution(cap, n, deliveries, pickups):
answer = 0
while deliveries and deliveries[-1] == 0: # 가장 먼 집부터 차례로 체크하며 배달해야할 첫 집 찾기
deliveries.pop()
while pickups and pickups[-1] == 0: # 가장 먼 집부터 차례로 체크하며 수거해야할 첫 집 찾기
pickups.pop()
while deliveries or pickups:
answer += max(len(deliveries), len(pickups)) * 2 # 둘 중 먼 곳 집의 거리를 answer에 추가(왕복거리라 *2)
box = 0 # 현재 박스 수
while box <= cap and deliveries:
if deliveries[-1] + box <= cap: # 트럭에 실을 수 있는 최대치 보다 적은 경우
box += deliveries.pop()
else: # 최대치 보다 많은 경우
deliveries[-1] -= cap-box
break
box = 0
while box <= cap and pickups:
if pickups[-1] + box <= cap:
box += pickups.pop()
else:
pickups[-1] -= cap-box
break
return answer
※ 잘못된 점, 개선점 등이 있다면 언제든 댓글로 알려주시면 감사하겠습니다.
반응형
'Alogorithm > programmers' 카테고리의 다른 글
[programmers] Lv2 과제 진행하기 - Python & Java (0) | 2023.03.31 |
---|---|
[programmers] Lv2 시소 짝꿍 - Python (0) | 2023.03.30 |
[programmers] Lv2 이모티콘 할인행사 - Python (0) | 2023.03.29 |
[programmers] Lv2 숫자 변환하기 - Python (2) | 2023.03.29 |
[programmers] Lv2 뒤에 있는 큰 수 찾기 - Python (0) | 2023.03.28 |